2

私は月の最初を取得するクエリを書きました、

SELECT DATEADD(DAY, -(DATEPART(DAY,GETDATE())-1), GETDATE()) as First_Of_Month;

適切な出力が得られますが、タイムスタンプは現在の時刻を示しています。

これがクエリで行っていることです。意味があることを願っています。

私を使用しdatepartて、いいえを計算しました。1 日から今日までの日数 (int) (27-1 = 26) 次に、dateadd関数を使用して、「-datepart」を追加して月の最初の日を取得しました。

これは単に日付を変更するだけです。時刻を変更するには、何を見たり読んだりする必要がありますか。私はそれが19000101と関係があると仮定しています

4

6 に答える 6

5

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');
于 2013-08-27T20:49:08.343 に答える
1

1 つの選択肢:

SELECT cast(
    cast(datepart(yyyy, getdate()) as varchar)
  + '-'
  + cast(datepart(mm, getdate()) as varchar) + '-01 00:00:00'
as datetime)

年/月のコンポーネントから日付を作成し、1 日と午前 0 時を追加します。

于 2013-08-27T20:49:03.743 に答える