In the following T-SQL Code:
wt.clsdt_date >= CAST('1/1/' + CAST(2011 - 1 AS varchar) AS DateTime)
what does '1/1' mean?
In the following T-SQL Code:
wt.clsdt_date >= CAST('1/1/' + CAST(2011 - 1 AS varchar) AS DateTime)
what does '1/1' mean?
(有关 SQL 的改进,请参阅其他答案。)
'1/1/'
is 字符串,因此+
is之后的结果字符串'1/1/year'
,例如
'1/1/' + CAST(2011 - 1 as varchar)
-> '1/1/' + '2010'
-> '1/1/2010'
然后将其强制转换(实际上是转换)为适当的类型。
如果没有更漂亮的方法来做到这一点,我会感到惊讶。
对于 SQL Server 2008 及之前的版本,似乎没有特别好的标准方法。
对于 SQL Server 2012,DATEFROMPARTS
如相关的 SO 帖子所示:
SELECT DATEFROMPARTS(@Year, @Month, @Day)
一个更安全的方法是:
WHERE wt.clsdt_date >= CONVERT(CHAR(4), 2011 - 1) + '0101';
您无需将其显式转换为 a datetime
,但您可以:
WHERE wt.clsdt_date >= CONVERT(DATETIME, CONVERT(CHAR(4), 2011 - 1) + '0101');
这使用非区域日期格式,并且仍然使用列上的索引(如果存在)。
此技术用于评估 wt.clsdt_date 是否在 2010 年期间或之后。完成此操作的更简洁方法如下:
YEAR(wt.clsdt_date) >= 2010