从sql server中的记录中选择上个月的第一天

时间:2013-07-29 19:44:26

标签: sql-server-2008

我有一个表,其中有一个名为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数据类型转换为日期时间数据类型会导致超出范围的日期时间值。”

1 个答案:

答案 0 :(得分: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 FIDDLE EXAMPLE