C#SQL Server将日期与字符串进行比较

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)

但我有这种兴奋.有人可以帮帮我吗?谢谢

Zoh*_*led 5

首先,您不应将日期存储为字符串.
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)