比较WHERE子句中的2个DateTime值

时间:2014-09-11 18:58:38

标签: sql-server

我有一个非常简单的查询。 (我在SQL Server 2008中工作。)我正在尝试从其ModifiedOn列大于指定日期的视图中选择所有记录。 ModifiedOn列是日期时间格式。所以,我有:

DECLARE @date1 AS datetime = '2013-07-31 24.59.59.999'
SELECT
some_column
FROM dbo.some_view
WHERE ModifiedOn > @date1

SQL抛出以下错误: 将varchar数据类型转换为日期时间数据类型会导致超出范围的值。为什么SQL认为我的某个日期是varchar,当我知道它们都是日期时间格式时?我该如何解决?

1 个答案:

答案 0 :(得分:2)

Datetime变量要求数据格式为

YYYY-MM-DD HH:MM:SS.mmm    

在您的情况下,您尝试分配的值不是有效时间。 HH.MM.SS.mmm

其次,时钟永远不会24:00:0023:59:59.999转到00:00:00.001

同样在你的情况下,而不是用秒和毫秒来玩杂耍。只需使用日期值并使用ANSI标准YYYYMMDD,它也是可以攻击的。

您可以编写上述查询,例如

SELECT some_column
FROM dbo.some_view
WHERE ModifiedOn >= '20130801'