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
War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top