我希望从日期(包括)开始获取所有记录。
如果我在where子句中使用以下内容,我会得到不同的记录:
SELECT * FROM MyTable WHERE DateTimeField >= '20101201'
比我在下面使用的那样:
SELECT * FROM MyTable WHERE DateTimeField >= Convert(datetime, '2010-12-01')
为什么我没有获得相同数量的寄存器?
我使用的是SQL Server 2008。
答案 0 :(得分:3)
第二种情况下的文字常量取决于语言,这是一个例子:
set language [British English]
SELECT Convert(datetime, '2010-12-01');
----
-- 2010-01-12 00:00:00.000
set language us_english
SELECT Convert(datetime, '2010-12-01');
----
-- 2010-12-01 00:00:00.000
虽然'20121201'
与语言无关。
因此,我认为您的会话语言(由login language
定义,除非明确更改)与us_english
不同,要解决此问题,您应使用与语言无关的日期文字'yyyymmdd'