1

In the following T-SQL Code:

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

what does '1/1' mean?

4

3 回答 3

3

(有关 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)
于 2012-06-08T18:57:11.617 回答
3

一个更安全的方法是:

WHERE wt.clsdt_date >= CONVERT(CHAR(4), 2011 - 1) + '0101';

您无需将其显式转换为 a datetime,但您可以:

WHERE wt.clsdt_date >= CONVERT(DATETIME, CONVERT(CHAR(4), 2011 - 1) + '0101');

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

没有长度也是一个坏习惯varchar

于 2012-06-08T19:12:32.950 回答
2

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

YEAR(wt.clsdt_date) >= 2010
于 2012-06-08T19:03:25.687 回答