我有一个非常简单的查询。 (我在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,当我知道它们都是日期时间格式时?我该如何解决?
答案 0 :(得分:2)
Datetime变量要求数据格式为
YYYY-MM-DD HH:MM:SS.mmm
在您的情况下,您尝试分配的值不是有效时间。 HH.MM.SS.mmm
其次,时钟永远不会24:00:00
从23:59:59.999
转到00:00:00.001
。
同样在你的情况下,而不是用秒和毫秒来玩杂耍。只需使用日期值并使用ANSI标准YYYYMMDD
,它也是可以攻击的。
您可以编写上述查询,例如
SELECT some_column
FROM dbo.some_view
WHERE ModifiedOn >= '20130801'