2013-07-29 47 views
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從sql server中的記錄中選擇上個月的第一天

如果我可以用這個DATEBYPARTS看起來這將是簡單的,但不幸的是我不能。 我嘗試使用1月1日日期

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

,但它的錯誤,並給出錯誤「一個char數據類型到datetime數據類型導致超出範圍的日期時間值的轉換。」

回答

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

或者,如阿龍貝特朗的意見建議,更清晰的方式

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

SQL FIDDLE EXAMPLE

+0

請使用'的MONTH'而不是像'mm'簡寫。爲什麼?那麼,看看'w'和'y'做什麼。可能不是你所期望的。鍵入你的意思,而不是懶惰的快捷鍵。請。 –

相關問題