sql datetime查询

时间:2012-09-10 12:48:59

标签: sql sql-server-2008 datetime

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

我需要执行查询... [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以来已经有一段时间了。 提前谢谢。

2 个答案:

答案 0 :(得分: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

如果转换为datetime2date,还有一些其他格式现在是安全的,但我记不住了,上面的内容通常就足够了。


另一种选择是在使用这些日期文字之前运行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')

答案 1 :(得分:0)

尝试:

where [CreatedDate] >= CONVERT(datetime,'2010-09-16 00:32:41.960');