Alf*_*rre 1 c# sql-server date
我必须比较一个表格字段,它是以'dd/MM/yyyy'格式存储为varchar的日期与日期值,但比较失败.我有例外
从字符串转换日期和/或时间时转换失败.我尝试将日期转换为比较i nstring,就像这样
string dateFormat = date.ToString("dd/MM/yyyy");
Run Code Online (Sandbox Code Playgroud)
然后像这样编写查询:
string sql = "select * from TB_RICHIESTE where CONVERT(DATE, Date) <= CONVERT(DATE, '" + dateFormat + "')";
Run Code Online (Sandbox Code Playgroud)
但我有这种兴奋.有人可以帮帮我吗?谢谢
首先,您不应将日期存储为字符串.
Panagiotis Kanavos在评论中写道 - 这是一个严重的错误.你不能按这样的列排序,你不能搜索日期范围,最重要的是 - 你无法控制是否有人输入了无效值 - 没有什么能阻止某人输入"Alfredo"到该列.
有关更多信息,请阅读Aaron Bertrand的糟糕习惯:选择错误的数据类型.
其次,您不应该将.Net中的日期作为字符串传递给Sql server.您应该将DateTime的实例作为参数传递..Net 直接映射到SQL Server .DateTime Date
如果您无法更改列的数据类型,则至少可以使用正确的转换样式(在您的情况下为103)将其转换为日期.
这是一个更好的方法:
var sql = "select * from TB_RICHIESTE where CONVERT(DATE, [Date], 103) <= @Date";
Run Code Online (Sandbox Code Playgroud)
然后将@Date参数添加到SqlCommand:
com.Parameters.Add("@Date", SqlDbType.Date).Value = date.Date;
Run Code Online (Sandbox Code Playgroud)