C# SQL Server 比较日期和字符串

标签 c# sql-server date

我必须比较一个表字段,该字段是一个以“dd/MM/yyyy”格式存储为 varchar 的日期与日期值,但比较失败。我有异常(exception)

Conversion failed when converting date and/or time from character string. I tried converting the date to compare i nstring, like this

string dateFormat = date.ToString("dd/MM/yyyy");

然后像这样写查询:

string sql = "select * from TB_RICHIESTE where CONVERT(DATE, Date) <= CONVERT(DATE, '" + dateFormat + "')";

但是我有这个异常(exception)。有人可以帮助我吗?谢谢

最佳答案

首先,您不应将日期存储为字符串。
正如 Panagiotis Kanavos 在他的评论中所写 - 这是一个严重的错误。您无法按此类列排序,无法搜索日期范围,最重要的是 - 您无法控制是否有人输入了无效值 - 没有什么可以阻止有人在该列中输入“Alfredo”。
有关详细信息,请阅读 Aaron Bertrand 的 Bad habits to kick : choosing the wrong data type .

其次,您不应该将日期作为字符串从 .Net 传递到 Sql 服务器。您应该将 DateTime 的实例作为参数传递。 .Net DateTime maps directly到 SQL Server 的 Date .

如果您不能更改列的数据类型,您至少可以使用适当的 convert style 将其转换为日期。 (在你的例子中是 103)。

这里有一个更好的方法:

var sql = "select * from TB_RICHIESTE where CONVERT(DATE, [Date], 103) <= @Date";

然后将@Date 参数添加到SqlCommand:

com.Parameters.Add("@Date", SqlDbType.Date).Value = date.Date;

关于C# SQL Server 比较日期和字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46950025/

相关文章:

sql - 嗅探 SQL Server 查询

sql-server - 表使用的空间

sql-server - SQL Server快速创建全字段选择

javascript - JS 日期 : Add 0 in front of every single day or month

c# - 如何从代码启动 Windows Azure 存储模拟器 V3.0

javascript - 从IE浏览器调用winform函数

c# - TPL 数据流 block 永远不会在 PropagateCompletion 上完成

c# - 比较标志枚举的更好方法是什么?

javascript - 使用 angularJS 和输入类型 ="date"更新 mongodb 中的日期

Java 日期 : Long to Date Striping off Time