在以下T-SQL代码中:
wt.clsdt_date >= CAST('1/1/' + CAST(2011 - 1 AS varchar) AS DateTime)
'1/1'是什么意思?
答案 0 :(得分:3)
(请参阅其他答案以了解SQL的改进。)
'1/1/'
是字符串,因此+
之后的结果字符串为'1/1/year'
,例如
'1/1/' + CAST(2011 - 1 as varchar)
-> '1/1/' + '2010'
-> '1/1/2010'
然后将其转换(确实转换为)适当的类型。
如果没有更漂亮的方法,我会感到惊讶。
对于SQL Server 2008和there does not appear to be a particularly nice standard method之前。
对于SQL Server 2012,this related SO post:
中显示DATEFROMPARTS
SELECT DATEFROMPARTS(@Year, @Month, @Day)
答案 1 :(得分:3)
更安全的方法是:
WHERE wt.clsdt_date >= CONVERT(CHAR(4), 2011 - 1) + '0101';
您无需将其明确地转换为datetime
,但您可以:
WHERE wt.clsdt_date >= CONVERT(DATETIME, CONVERT(CHAR(4), 2011 - 1) + '0101');
这使用非区域日期格式,并且仍然使用列上的索引(如果存在)。
答案 2 :(得分:2)
此技术用于评估wt.clsdt_date是否在2010年期间或之后。更简洁的方法如下:
YEAR(wt.clsdt_date) >= 2010