Database
 sql >> Baza danych >  >> RDS >> Database

Jak zamawiać według daty w T-SQL

Problem:

Chcesz posortować wiersze według daty.

Przykład 1:

exam tabela ma dwie kolumny, subject i exam_date .

Temat Data egzaminu
Matematyka 2019-12-19
angielski 2020-01-08
Nauka 2020-01-05
Zdrowie 2020-01-05
Sztuka NULL

Chcesz posortować wiersze według exam_date .

Rozwiązanie:

SELECT *
FROM Exam
ORDER BY ExamDate;

Wynik wygląda tak (wiersze są sortowane w porządku rosnącym według ExamDate ):

Temat Data egzaminu
Sztuka NULL
Nauka 2020-01-05
Zdrowie 2020-01-05
angielski 2020-01-08
Matematyka 2019-12-19

Dyskusja:

Użyj ORDER BY słowo kluczowe i nazwę kolumny, według której chcesz sortować. W ten sposób posortujesz dane w kolejności rosnącej według tej kolumny. Możesz także użyć ASC słowo kluczowe, aby było jasne, że kolejność rośnie (najwcześniejsza data jest wyświetlana jako pierwsza, najnowsza data jest wyświetlana jako ostatnia itd.).

SELECT *
FROM Exam
ORDER BY ExamDate ASC;

Jeśli chcesz, aby najnowsza data była widoczna jako pierwsza, a najwcześniejsza jako ostatnia, musisz posortować dane w kolejności malejącej. Użyj DESC w tym przypadku słowo kluczowe.

SELECT *
FROM Exam
ORDER BY ExamDate DESC;

Zauważ, że w T-SQL NULL s są wyświetlane jako pierwsze przy sortowaniu w porządku rosnącym i jako ostatnie przy sortowaniu w porządku malejącym. Ponadto wiersze z tym samym ExamDate są wyświetlane w niedeterministycznej kolejności (możesz zobaczyć Science drugi i Health trzeci lub Health drugi i Science trzeci).

Przykład 2:

exam tabela ma następujące kolumny:subject , exam_year , exam_month i exam_day . Miesiąc jest podawany według nazwy, a nie numeru.

Temat Rok egzaminu Miesiąc egzaminu Dzień egzaminu
Matematyka 2019 grudzień 19
angielski 2020 Styczeń 8
Nauka 2020 Styczeń 5
Zdrowie 2020 Styczeń 5
Sztuka NULL NULL NULL

Chcesz posortować wiersze według daty egzaminu.

Rozwiązanie:

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

Wynik wygląda tak (wiersze są sortowane rosnąco według ExamYear , ExamMonth i ExamDate ):

Temat Rok egzaminu Miesiąc egzaminu Dzień egzaminu
Sztuka NULL NULL NULL
Zdrowie 2020 Styczeń 5
Nauka 2020 Styczeń 5
angielski 2020 Styczeń 8
Matematyka 2019 grudzień 19

Dyskusja:

Aby pogrupować według daty, utwórz wartości dat na podstawie wartości roku, miesiąca i dnia. Aby to zrobić, użyj funkcji CAST(). Jeśli masz datę zapisaną jako ciąg w 'YYYY-Month-DD ', możesz rzutować go na datę za pomocą CAST(date_string AS date) . Najpierw musisz utworzyć ciąg znaków, również za pomocą funkcji CAST():

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

Wyrażenie CAST(ExamYear AS VARCHAR(4)) tworzy ciąg z liczby przechowywanej w ExamYear . Wyrażenie CAST(ExamDay AS VARCHAR(2)) tworzy ciąg z liczby przechowywanej w ExamDay . ExamMonth jest już ciągiem, więc nie ma potrzeby go rzucać.

Następnie musisz rzutować ten ciąg na datę za pomocą CAST(date_string AS date) funkcja:

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

Użyj go z ORDER BY klauzula sortowania wierszy w porządku rosnącym według daty. Jeśli chcesz zobaczyć wiersze w kolejności malejącej, po prostu dołącz DESC słowo kluczowe, takie jak to:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Monitorowanie synchronizacji replik grupy dostępności

  2. Czym są strumienie sekwencyjne i równoległe w Javie?

  3. Uczestniczysz w szczycie PASS w Charlotte?

  4. Jak używać instrukcji Alter Table w SQL?

  5. Powtarzalny poziom izolacji odczytu