CAST的意义('1/1'+ ......作为DATETIME)?

时间:2012-06-08 18:55:32

标签: sql-server tsql

在以下T-SQL代码中:

wt.clsdt_date >= CAST('1/1/' + CAST(2011 - 1 AS varchar) AS DateTime)

'1/1'是什么意思?

3 个答案:

答案 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');

这使用非区域日期格式,并且仍然使用列上的索引(如果存在)。

另外varchar without length is a bad habit.

答案 2 :(得分:2)

此技术用于评估wt.clsdt_date是否在2010年期间或之后。更简洁的方法如下:

YEAR(wt.clsdt_date) >= 2010