0

我有这种日期时间类型的表:2010-09-16 00:32:41.960'CreatedDate 列。

我需要执行一个查询 ... where [CreatedDate] >= '2010-09-16 00:32:41.960' 但这只是给了我

The conversion of a varchar data type to a datetime data type resulted in an out-of-range value.

什么是正确的语法,自从我上次做 SQL 以来已经有一段时间了。提前致谢。

4

2 回答 2

3

使用明确的日期时间格式,这样 SQL Server 就不必猜测如何转换它:

where [CreatedDate] >= '2010-09-16T00:32:41.960'

遗憾的是,根据您的区域设置,它可能会将带有空格分隔符(而不是T)的表单解释为YYYY-DD-MM hh:mm:ss. 您的示例给出了超出范围的月份(以及月初日期的错误结果,除非天=月)

我通常会将安全格式列为:

  • YYYYMMDD
  • YYYY-MM-DD'T'hh:mm:ss
  • YYYY-MM-DD'T'hh:mm:ss.mil

datetime2如果转换为or ,现在还有一些其他格式是安全的date,但我不记得它们了,以上通常就足够了。


另一种选择是set dateformat在使用这些日期文字之前运行一条语句:

set dateformat mdy
select MONTH('2010-09-16 00:32:41.960')

结果是给出9,而您所经历的可以通过以下方式重现:

set dateformat dmy
select MONTH('2010-09-16 00:32:41.960')
于 2012-09-10T12:50:47.040 回答
0

尝试:

where [CreatedDate] >= CONVERT(datetime,'2010-09-16 00:32:41.960');
于 2012-09-10T12:50:45.613 回答