查询以使该月的第一天不使用DATEADD

时间:2015-05-29 21:02:26

标签: sql-server tsql dateadd

我一直在编写查询,根据this onethis one(以及许多其他地方)之类的答案来截断给定日期时间多年的时间,这些答案将一些函数分组为< / p>

SELECT DATEADD(day, 0, DATEDIFF(day, 0, getdate()))

它总能给出正确的答案。

我想我可以使用month而不是day将相同的逻辑转换为查找当月的第一个,但它给了我一个奇怪的结果日期: 1903- 10-17 ,而不是 2015-05-01

1 个答案:

答案 0 :(得分:0)

我的参数总是排错了。

事实证明,这些年来我一直在使用的DATEADD的格式是错误的,并且它只是起作用,因为它使用的是day datepart。将int转换为日期会增加日期:

SELECT CAST(0 AS datetime) = '1900-01-01 00:00:00.000'
SELECT CAST(1 AS datetime) = '1900-01-02 00:00:00.000'
SELECT CAST(2 AS datetime) = '1900-01-03 00:00:00.000'

我应该使用DATEADD(d, DATEDIFF(d, 0, getdate()), 0) - 参数是(datepart,number, date ,如here at MSDN所示。

将其写为SELECT DATEADD(month, DATEDIFF(month, 0, getdate()), 0)可获得 2015-05-01 的预期结果。