2

我有一个表,其中有一个名为StartDateTime存储日期时间值的列。我需要一个语句,它将返回当前记录的上个月第一天的日期。因此,如果存储日期是2006-06-17 08:23:42.000语句将返回2006-05-01 00:00:00.000,重要的是如果存储日期是2006-01-17 08:23:42.000语句将返回2005-11-1 00:00:00.000

如果我可以使用DATEBYPARTS这似乎很简单,但不幸的是我不能。我尝试使用

CAST( 
   CAST( Year([StartDateTime]) as varchar(4) ) 
   + '-' + 
   CAST( (Month([StartDateTime])-1) as varchar(2) ) 
   + '-' + 
   CAST( '1' as varchar(2) ) 
AS DATETIME )

但它在 1 月 1 日的日期出错并给出错误“将 char 数据类型转换为日期时间数据类型导致超出范围的日期时间值。”

4

1 回答 1

5
select dateadd(mm, datediff(mm, 0, StartDateTime) - 1, 0)
from <yourtable>

或者,正如 Aaron Bertrand 在评论中建议的那样,更清晰的方式

select dateadd(month, datediff(month, 0, StartDateTime) - 1, 0)
from <yourtable>

SQL 提琴示例

于 2013-07-29T19:47:26.620 回答