我一直在编写查询,根据this one和this one(以及许多其他地方)之类的答案来截断给定日期时间多年的时间,这些答案将一些函数分组为< / p>
SELECT DATEADD(day, 0, DATEDIFF(day, 0, getdate()))
它总能给出正确的答案。
我想我可以使用month
而不是day
将相同的逻辑转换为查找当月的第一个,但它给了我一个奇怪的结果日期: 1903- 10-17 ,而不是 2015-05-01 。
答案 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 的预期结果。