比较日期时出错

时间:2013-03-10 03:54:45

标签: c# sql sql-server-2008

我有一个名为NVARCHAR的{​​{1}}列。我想将其内容与当前时间进行比较,但是当我调用Receivingdate时,我收到以下错误:

  

将nvarchar转换为datetime会导致超出范围值

我使用C#中的以下调用插入数据:

WHERE (Receivingdate < Getdate())

我想知道我做错了什么。

2 个答案:

答案 0 :(得分:3)

您遇到的错误是将日期存储在NVARCHAR列中。请停止这样做。修复表并使用DATE数据类型创建该列。该错误是由垃圾数据进入您的表引起的。使用以下命令查找这些行:

SELECT Receivingdate FROM dbo.YourTable 
  WHERE ISDATE(ReceivingDate) = 0;

现在,在修复数据类型之前,您需要更正或删除它们。然后:

ALTER TABLE dbo.YourTable 
  ALTER COLUMN ReceivingDate DATE;

接下来,在插入时停止转换为区域字符串格式。只需插入C#中的DateTime值,而无需调用.ToString()。绝对没有理由你应该将日期转换为字符串并通过任何此过程再次返回,除非您想要显示它。

答案 1 :(得分:0)

您的错误是您尝试将字符串与日期进行比较。日期是数字。唯一需要担心格式的是显示格式。

对于您目前所显示的内容,请更改

中的c#代码
DateTime.Now.AddDays(ces).ToString("dd/MM/yyyy");

 DateTime.Today;

你应该没事。