我有一个NVARCHAR
名为Receivingdate
. 我想将其内容与当前时间进行比较,但是当我调用 时WHERE (Receivingdate < Getdate())
,出现以下错误:
将 nvarchar 转换为 datetime 导致值超出范围
我使用来自 C# 的以下调用插入数据:
DateTime.Now.AddDays(ces).ToString("dd/MM/yyyy");
我想知道我做错了什么。
我有一个NVARCHAR
名为Receivingdate
. 我想将其内容与当前时间进行比较,但是当我调用 时WHERE (Receivingdate < Getdate())
,出现以下错误:
将 nvarchar 转换为 datetime 导致值超出范围
我使用来自 C# 的以下调用插入数据:
DateTime.Now.AddDays(ces).ToString("dd/MM/yyyy");
我想知道我做错了什么。
您做错的是将日期存储在NVARCHAR
列中。请停止这样做。修复您的表格并使用DATE
数据类型创建该列。该错误是由垃圾数据进入您的表引起的。使用以下命令查找这些行:
SELECT Receivingdate FROM dbo.YourTable
WHERE ISDATE(ReceivingDate) = 0;
现在,您需要在修复数据类型之前更正或删除它们。然后:
ALTER TABLE dbo.YourTable
ALTER COLUMN ReceivingDate DATE;
接下来,在插入时停止转换为区域字符串格式。只需从 C# 中插入DateTime
值,而无需调用.ToString()
。绝对没有理由您应该通过任何此过程将日期转换为字符串并再次转换回来,除非您要显示它。
您的错误是您正在尝试将字符串与日期进行比较。日期是数字。唯一担心格式的时间是在显示它们时。
对于您到目前为止所显示的内容,将您的 c# 代码从
DateTime.Now.AddDays(ces).ToString("dd/MM/yyyy");
至
DateTime.Today;
你应该没事。