sql >> Database >  >> RDS >> Database

Hoe te bestellen op datum in T-SQL

Probleem:

U wilt de rijen op datum sorteren.

Voorbeeld 1:

Het exam tabel heeft twee kolommen, subject en exam_date .

Onderwerp ExamenDatum
Wiskunde 2019-12-19
Engels 2020-01-08
Wetenschap 05-01-2020
Gezondheid 05-01-2020
Kunst NULL

U wilt de rijen sorteren op exam_date .

Oplossing:

SELECT *
FROM Exam
ORDER BY ExamDate;

Het resultaat ziet er als volgt uit (de rijen zijn in oplopende volgorde gesorteerd op ExamDate ):

Onderwerp ExamenDatum
Kunst NULL
Wetenschap 05-01-2020
Gezondheid 05-01-2020
Engels 2020-01-08
Wiskunde 2019-12-19

Discussie:

Gebruik de ORDER BY trefwoord en de naam van de kolom waarop u wilt sorteren. Op deze manier sorteert u de gegevens in oplopende volgorde op deze kolom. U kunt ook de ASC . gebruiken trefwoord om duidelijk te maken dat de volgorde oplopend is (de vroegste datum wordt eerst weergegeven, de laatste datum wordt als laatste weergegeven, enz.).

SELECT *
FROM Exam
ORDER BY ExamDate ASC;

Als u de laatste datum eerst en de vroegste datum als laatste wilt zien, moet u in aflopende volgorde sorteren. Gebruik de DESC zoekwoord in dit geval.

SELECT *
FROM Exam
ORDER BY ExamDate DESC;

Merk op dat in T-SQL, NULL s worden als eerste weergegeven bij het sorteren in oplopende volgorde en als laatste bij het sorteren in aflopende volgorde. Ook de rijen met dezelfde ExamDate worden weergegeven in niet-deterministische volgorde (u ziet mogelijk Science tweede en Health derde, of Health tweede en Science derde).

Voorbeeld 2:

Het exam tabel heeft de volgende kolommen:subject , exam_year , exam_month , en exam_day . De maand wordt op naam gegeven, niet op nummer.

Onderwerp Examenjaar ExamMaand Examendag
Wiskunde 2019 december 19
Engels 2020 Januari 8
Wetenschap 2020 Januari 5
Gezondheid 2020 Januari 5
Kunst NULL NULL NULL

U wilt de rijen sorteren op examendatum.

Oplossing:

SELECT *
FROM Exam
ORDER BY CAST(
  CAST(ExamYear AS VARCHAR(4))
  + '-'
  + ExamMonth
  + '-'
  + CAST(ExamDay AS VARCHAR(2))
AS DATE);

Het resultaat ziet er als volgt uit (de rijen zijn in oplopende volgorde gesorteerd op ExamYear , ExamMonth , en ExamDate ):

Onderwerp Examenjaar ExamMaand Examendag
Kunst NULL NULL NULL
Gezondheid 2020 Januari 5
Wetenschap 2020 Januari 5
Engels 2020 Januari 8
Wiskunde 2019 december 19

Discussie:

Als u op datum wilt groeperen, maakt u datumwaarden van het jaar, de maand en de dagwaarden. Gebruik hiervoor de functie CAST(). Als je een datum hebt opgeslagen als een string in de 'YYYY-Month-DD ' formaat, kunt u het naar een datum casten met CAST(date_string AS date) . Eerst moet je een string maken, ook met de CAST()-functie:

CAST(ExamYear AS VARCHAR(4))
+ '-'
+ ExamMonth
+ '-'
+ CAST(ExamDay AS VARCHAR(2))

De uitdrukking CAST(ExamYear AS VARCHAR(4)) maakt een string van het nummer dat is opgeslagen in ExamYear . De uitdrukking CAST(ExamDay AS VARCHAR(2)) maakt een string van het nummer dat is opgeslagen in ExamDay . ExamMonth is al een string, dus het is niet nodig om deze te casten.

Vervolgens moet u deze tekenreeks naar een datum casten met behulp van de CAST(date_string AS date) functie:

CAST(
  CAST(ExamYear AS VARCHAR(4))
  + '-'
  + ExamMonth
  + '-'
  + CAST(ExamDay AS VARCHAR(2))
AS DATE)

Gebruik het met een ORDER BY om de rijen in oplopende volgorde op datum te sorteren. Als u de rijen in aflopende volgorde wilt zien, voegt u gewoon een DESC . toe zoekwoord, zoals dit:

SELECT *
FROM Exam
ORDER BY CAST(
  CAST(ExamYear AS VARCHAR(4))
  + '-'
  + ExamMonth
  + '-'
  + CAST(ExamDay AS VARCHAR(2))
AS DATE) DESC;

  1. PostgreSQL:serieel versus identiteit

  2. MySQL - Maak een bestaand veld uniek

  3. Tablesample en andere methoden om willekeurige tuples te krijgen

  4. Kan pg gem niet installeren op Mountain Lion