web-dev-qa-db-ja.com

日付を月の最初の日に丸める

私はSQL Server 2014を使用していて、到着日がリストされているテーブルの1つの列を使用しています。

これは次の形式です。

ArrivalDate
2015-10-17 00:00:00.000
2015-12-03 00:00:00.000

ArrivalDate列を含む、上のテーブルからデータをプルするクエリを書いています。ただし、それぞれの月の最初の日になるように日付を変換する必要があります。

つまり、私のクエリは上記の例を次のように出力する必要があります。

2015-10-01 00:00:00.000
2015-12-01 00:00:00.000

これは、PowerPivotモデルで日付テーブルとの関係を作成するために必要です。

私はこの構文を試しましたが、私の要件を満たしていません:

CONVERT(CHAR(4),[ArrivalDate], 100) + CONVERT(CHAR(4), [ArrivalDate], 120) AS [MTH2]
11
user3115933

たとえば、指定された月の15日である場合、14を減算して、結果を日付にキャストします。

SELECT ArrivalDate
     , CAST(DATEADD(DAY, -DATEPART(DAY, ArrivalDate) + 1, ArrivalDate) AS DATE) AS FirstDay
FROM (VALUES
    (CURRENT_TIMESTAMP)
) AS t(ArrivalDate)
ArrivalDate             | FirstDay
2019-05-15 09:35:12.050 | 2019-05-01

しかし、私のお気に入りは EOMONTH で、SQL Server 2012が必要です。

SELECT ArrivalDate
     , DATEADD(DAY, 1, EOMONTH(ArrivalDate, -1)) AS FirstDay
FROM (VALUES
    (CURRENT_TIMESTAMP)
) AS t(ArrivalDate)
ArrivalDate             | FirstDay
2019-05-15 09:35:52.657 | 2019-05-01
13
Salman A

FORMATを使用して日付をフォーマットします。

DECLARE @date DATETIME = '2015-10-17 00:00:00.000'

SELECT FORMAT(@date, 'yyyy-MM-01 HH:mm:ss.fff')

または、時間部分が必要ない場合:

SELECT FORMAT(@date, 'yyyy-MM-01 00:00:00.000')

LiveDemo

8
Lukasz Szozda

日付を月の最初に丸める:

DATEADD(MONTH, DATEDIFF(MONTH, 0, DateColumn), 0)
4
Metaphor

SQL Server 2012以降、 DATEFROMPARTS を使用することもできます:

SELECT DATEFROMPARTS(YEAR(ArrivalDate), MONTH(ArrivalDate), 1)
FROM   my_table
4
Code Different

または、単にROUND関数を使用します-

SELECT ROUND(TO_DATE('27 -OCT-00 ')、' YEAR ') "New Year" FROM DUAL;

新年

01-JAN-01

0
Ryan Kramer