SQL Server 2012 の場合(adrift と i-one に感謝)
DECLARE @now DATETIME = CURRENT_TIMESTAMP;
SELECT DATEADD(DAY, 1, EOMONTH(@now, -1));
-- or
SELECT DATEFROMPARTS(YEAR(@now), MONTH(@now), 1);
SQL Server 2008 以降の場合
DECLARE @now DATETIME = CURRENT_TIMESTAMP;
-- This shorthand works:
SELECT CONVERT(DATE, @now+1-DAY(@now));
-- But I prefer to be more explicit, instead of relying on
-- shorthand date math (which doesn't work in all scenarios):
SELECT CONVERT(DATE, DATEADD(DAY, 1-DAY(@now), @now));
SQL Server 2005 の場合
SELECT DATEADD(MONTH, DATEDIFF(MONTH, 0, GETDATE()),0);
この SQL Server 2005 の方法を使用している場合の警告:DATEDIFF
クエリに関係する式の使用には注意が必要です。ここで見られるように、SQL Server は引数を転置し、恐ろしい見積もりにつながる可能性があります。少し効率の悪い文字列アプローチを採用する方が実際には安全かもしれません。
SELECT CONVERT(DATETIME, CONVERT(CHAR(6), GETDATE(), 112) + '01');