2015-10-19 6 views
8

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] 
+1

この列は実際には 'datetime'フィールドですか、' varchar'のバリエーションに格納されていますか? – Jamiec

+0

日時フィールドです。 – user3115933

+0

この場合、「フォーマット」はありません。あなたは本当に、ある日付の月の最初を見つけるために、日付を使った算術演算をする必要があるかどうかを尋ねています。 – Jamiec

答えて

8

例えば、それは与えられた月の15日で、場合、あなたは14を引く:

SELECT 
    ArrivalDate, 
    DATEADD(DAY, -DATEPART(DAY, ArrivalDate) + 1, ArrivalDate) AS FirstDay 
FROM [Your Table] 

解消するためにあなたが使用できる時間部分はCAST(... AS DATE)です。

+0

まさに私が必要なもの! – user3115933

+0

パーフェクト!ありがとうございます! – JwJosefy

5

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

+1

仕事をしてください!高く評価。 – user3115933

1

月の最初のラウンド日付:

以降で
DATEADD(MONTH, DATEDIFF(MONTH, 0, DateColumn), 0) 
2

SQL Ser ver 2012では、DATEFROMPARTS

SELECT DATEFROMPARTS(YEAR(ArrivalDate), MONTH(ArrivalDate), 1) 
FROM my_table 
関連する問題