sql >> Databáze >  >> RDS >> Database

Jak objednávat podle data v T-SQL

Problém:

Chcete seřadit řádky podle data.

Příklad 1:

exam tabulka má dva sloupce, subject a exam_date .

Předmět Datum zkoušky
Matematika 19. 12. 2019
Angličtina 2020-01-08
Věda 2020-01-05
Zdraví 2020-01-05
Umění NULL

Chcete seřadit řádky podle exam_date .

Řešení:

SELECT *
FROM Exam
ORDER BY ExamDate;

Výsledek vypadá takto (řádky jsou seřazeny vzestupně podle ExamDate ):

Předmět Datum zkoušky
Umění NULL
Věda 2020-01-05
Zdraví 2020-01-05
Angličtina 2020-01-08
Matematika 19. 12. 2019

Diskuse:

Použijte ORDER BY klíčové slovo a název sloupce, podle kterého chcete třídit. Tímto způsobem seřadíte data vzestupně podle tohoto sloupce. Můžete také použít ASC klíčové slovo, aby bylo jasné, že objednávka je vzestupná (nejstarší datum se zobrazí jako první, poslední datum se zobrazí jako poslední atd.).

SELECT *
FROM Exam
ORDER BY ExamDate ASC;

Pokud chcete, aby se jako první zobrazilo nejnovější datum a jako poslední se zobrazí nejstarší datum, je třeba seřadit sestupně. Použijte DESC v tomto případě klíčové slovo.

SELECT *
FROM Exam
ORDER BY ExamDate DESC;

Všimněte si, že v T-SQL NULL s se zobrazují jako první při vzestupném řazení a jako poslední při sestupném řazení. Také řádky se stejným ExamDate jsou zobrazeny v nedeterministickém pořadí (můžete vidět Science druhý a Health třetí nebo Health druhý a Science třetí).

Příklad 2:

exam tabulka má následující sloupce:subject , exam_year , exam_month a exam_day . Měsíc je dán jménem, ​​nikoli číslem.

Předmět ExamYear Měsíc zkoušky Den zkoušky
Matematika 2019 Prosinec 19
Angličtina 2020 leden 8
Věda 2020 leden 5
Zdraví 2020 leden 5
Umění NULL NULL NULL

Chcete seřadit řádky podle data zkoušky.

Řešení:

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

Výsledek vypadá takto (řádky jsou seřazeny vzestupně podle ExamYear , ExamMonth a ExamDate ):

Předmět ExamYear Měsíc zkoušky Den zkoušky
Umění NULL NULL NULL
Zdraví 2020 leden 5
Věda 2020 leden 5
Angličtina 2020 leden 8
Matematika 2019 Prosinec 19

Diskuse:

Chcete-li seskupit podle data, vytvořte hodnoty data z hodnot roku, měsíce a dne. Chcete-li to provést, použijte funkci CAST(). Pokud máte datum uložené jako řetězec v 'YYYY-Month-DD ', můžete jej přenést na datum pomocí CAST(date_string AS date) . Nejprve musíte vytvořit řetězec, také pomocí funkce CAST():

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

Výraz CAST(ExamYear AS VARCHAR(4)) vytvoří řetězec z čísla uloženého v ExamYear . Výraz CAST(ExamDay AS VARCHAR(2)) vytvoří řetězec z čísla uloženého v ExamDay . ExamMonth je již řetězec, takže jej není třeba přenášet.

Poté musíte tento řetězec přenést na datum pomocí CAST(date_string AS date) funkce:

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

Použijte jej s ORDER BY klauzule k řazení řádků vzestupně podle data. Pokud chcete řádky zobrazit v sestupném pořadí, stačí připojit DESC klíčové slovo, například toto:

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

  1. Vánoce přicházejí brzy (Oracle 12.2)

  2. jak přidat vlastní adaptér do aktivity, aby se seznam objevil v aktivitě?

  3. Škálování PostgreSQL pro velké množství dat

  4. 3 způsoby, jak vypsat všechny uložené procedury, které odkazují na tabulku v PostgreSQL