Art unterschiedliche Datumsspalte
-
06-09-2019 - |
Frage
Ich brauche verschiedenes Jahr und Monat von Datumsspalten, die von derselben Spalte sortiert werden würde.
Ich habe Datum coulmn mit Werten wie (YYYY / MM / DD)
2007/11/7
2007/1/8
2007/11/4
2007/12/3
2008/10/4
2009/11/5
2008/5/16
Nach Abfrage mit, sollte es sein
2007/1/1
2007/11/1
2007/12/1
2008/5/1
2008/10/1
2009/11/1
Dies scheint nicht zu funktionieren
SELECT distinct (cast(year(datecol) as nvarchar(20) ) +
'/'+ cast(month(datecol) as nvarchar(20) ) + '/1') as dt1
FROM Table
ORDER BY dt1
Lösung
soemthing wie dies würde auf MS SQL Server arbeiten:
select
distinct
dateadd(day, -1 * DAY(datefield) + 1, datefield)
From
datetable
order by
dateadd(day, -1 * DAY(datefield) + 1, datefield)
Der Aufruf DATEADD Funktion subtrahiert grundsätzlich (Tag-1) Tagen ab dem aktuellen Datum. -> Sie erhalten immer die erste von was auch immer Monat dieses Datum in
Sortieren nach ihm und du bist fertig! : -)
Darüber hinaus können Sie auch diese Funktionalität in der Tabelle als „berechnete Spalte“ hinzufügen und dann für eine einfache acccess verwenden:
alter table yourTable
add FirstOfMonth As DATEADD(day, -1 * DAY(datefield) + 1, datefield) persisted
Dann ist Ihre Abfrage wäre noch einfacher:
SELECT DISTINCT FirstOfMonth
FROM YourTable
ORDER BY FirstOfMonth
Marc
Andere Tipps
Wenn mit Daten in SqlServer vermeiden, mit cast
wie dies zu tun -. Das resultierende Format auf Serverkonfiguration abhängig ändern
Verwenden Sie stattdessen convert
und wählen Sie ein Format (zum Beispiel 112 ), dass führende Nullen auf den Monat erstellt.
Anil, Haben Sie auch Zeit an die Termine haben? Welche datatype verwenden Sie für die Spalte? Bist du mit Datetime oder Char datatype?
Dies funktioniert für mich
SELECT DISTINCT (DateField) AS Date FROM DateTable ORDER BY 1