私は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]
たとえば、指定された月の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
日付を月の最初に丸める:
DATEADD(MONTH, DATEDIFF(MONTH, 0, DateColumn), 0)
SQL Server 2012以降、 DATEFROMPARTS
を使用することもできます:
SELECT DATEFROMPARTS(YEAR(ArrivalDate), MONTH(ArrivalDate), 1)
FROM my_table
または、単にROUND関数を使用します-
SELECT ROUND(TO_DATE('27 -OCT-00 ')、' YEAR ') "New Year" FROM DUAL;
01-JAN-01