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 データ型から datetime データ型への変換により、datetime 値が範囲外になりました」というエラーが表示されます。

4

1 に答える 1

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

または、アーロン・バートランドがコメントで示唆したように、より明確な方法

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

SQL フィドルの例

于 2013-07-29T19:47:26.620 に答える