2015-10-19 8 views
8

Ich benutze SQL Server 2014 und arbeite mit einer Spalte aus einer meiner Tabellen, die die Daten der Ankunft angeben.Verrundung der Daten zum ersten Tag des Monats

Es ist in folgendem Format:

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

ich eine Abfrage schreibe, die Daten aus der obigen Tabelle ziehen würde, einschließlich der Ankunftstag Spalte. Allerdings muss ich die Daten so konvertieren, dass sie zum ersten Tag ihrer jeweiligen Monate werden.

Mit anderen Worten, meine Abfrage des obige Beispiel Ausgabe sollte wie folgt:

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

Ich brauche das so, dass ich eine Beziehung mit meinem Date Table in meinem Power Modell erstellen kann.

Ich habe diese Syntax versucht, aber es ist meine Anforderungen nicht erfüllen:

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

Ist diese Spalte tatsächlich ein 'datetime' Feld, oder ist es in einigen Variationen von' varchar' gespeichert? – Jamiec

+0

Es ist ein Datetime-Feld. – user3115933

+0

In diesem Fall hat es kein "Format". Sie fragen wirklich, ob Sie mit Daten arithmetisch arbeiten müssen, um den Ersten des Monats für ein bestimmtes Datum zu finden. – Jamiec

Antwort

8

Wenn es zum Beispiel 15. Monats ist sie 14 dann subtrahieren:

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

zu beseitigen Der Zeitabschnitt, den Sie verwenden können, ist CAST(... AS DATE).

+0

Genau das, was ich brauchte! – user3115933

+0

Perfekt! Danke mein Herr! – JwJosefy

5

Verwenden Sie FORMAT, um Ihr Datum zu formatieren.

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

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

Oder wenn Sie keine Zeit Teil wollen:

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

LiveDemo

+1

Macht den Job! Hoch geschätzt. – user3115933

1

Round Datum zum ersten des Monats:

DATEADD(MONTH, DATEDIFF(MONTH, 0, DateColumn), 0) 
2

mit Beginning SQL Ser ver 2012 können Sie auch DATEFROMPARTS verwenden:

SELECT DATEFROMPARTS(YEAR(ArrivalDate), MONTH(ArrivalDate), 1) 
FROM my_table