SQL 数据库日期格式
本文关键字:格式 日期 数据库 SQL | 更新日期: 2023-09-27 18:37:11
我有一个网格视图和sqldatasource。在表定义中,日期的默认格式是 mm:dd:yyyy ,有没有办法从 sql 设置或类似的东西将格式更改为 dd:mm:yyyy。
我在表单加载(对于 dd/mm/.yyyy)中具有全球化,但是当我从数据源中选择某些日期之间的一些值时:
string d1 = Convert.ToDateTime(date1.Text).ToString("dd.MM.yyyy");
string d2 = Convert.ToDateTime(date2.Text).ToString("dd.MM.yyyy");
SqlDataSource1.SelectCommand = "Select * FROM test WHERE Name = '"+name.Text+"' AND Date between '"+d1+"' AND '"+d2+"'";
它仅适用于mm/dd/yyyy
。
有什么办法可以改变它吗?
避免不必要的转换回字符串并使用参数:
DateTime d1 = Convert.ToDateTime(date1.Text);
DateTime d2 = Convert.ToDateTime(date2.Text);
SqlDataSource1.SelectCommand = "Select * FROM test WHERE Name = @name AND Date between @d1 AND @d2";
SqlDataSource1.SelectCommand.Parameters.AddParameterWithValue("@name", name.Text);
SqlDataSource1.SelectCommand.Parameters.AddParameterWithValue("@d1", d1);
SqlDataSource1.SelectCommand.Parameters.AddParameterWithValue("@d2", d2);
如果可以在查询中使用参数,那就更好了。此外,如果您的列类型是日期,那么最好不要将它们转换为字符串进行比较。尝试以下操作
SqlDataSource1.SelectParameters.Add("@d1", date1);
SqlDataSource1.SelectParameters.Add("@d2", date2);
SqlDataSource1.SelectCommand = "Select * FROM test WHERE Name = '"+name.Text+"' AND Date between @d1 AND @d2";
还可以使用名称参数
使用参数化查询,你所有的问题都会消失。 :)
SqlDataSource1.SelectCommand = "Select * FROM test WHERE Name = @p_Name AND Date between @p_from AND @p_to";
SqlDataSource1.SelectCommand.Parameters.Add ("@p_Name", SqlDbType.String).Value = name.Text;
SqlDataSource1.SelectCommand.Parameters.Add ("@p_from", SqlDbType.DateTime).Value = d1;
SqlDataSource1.SelectCommand.Parameters.Add ("@p_to", SqlDbType.DateTime).Value = d2;
尝试使用参数:
SqlDataSource1.SelectCommand = "SELECT * FROM test WHERE Name = @Name AND Date between @DateLow AND @DateHigh";
SqlDataSource1.SelectParameters.Add("Name", name.Text);
SqlDataSource1.SelectParameters.Add("DateLow", DbType.DateTime, d1);
SqlDataSource1.SelectParameters.Add("DateHigh", DbType.DateTime, d2);
SqlDataSource1.SelectCommand= " SELECT [columns] FROM [table] WHERE Name =
'"+name.Text+"' AND Date BETWEEN
CONVERT(Date,'"+d1+"' , 105) AND CONVERT(Date,'"+d2+"', 105)"
试试这个....