sql >> Databáze >  >> RDS >> Mysql

Jak objednávat podle data v MySQL

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 exam_date;

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

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

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 exam_date 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 exam_date DESC;

Všimněte si, že v MySQL NULL s se zobrazují jako první při vzestupném řazení a jako poslední při sestupném řazení. Také řádky se stejným exam_date se zobrazují v náhodném pořadí (můžete vidět Science třetí a Health čtvrtý nebo Health třetí a Science čtvrtý).

Příklad 2:

exam tabulka má následující sloupce:subject , exam_year , exam_month a exam_day . Měsíce jsou uvedeny ve jménech, nikoli v číslech.

předmět exam_year exam_month exam_day
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 STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');

Výsledek vypadá takto (řádky jsou seřazeny vzestupně podle exam_year , exam_month a exam_date ):

předmět exam_year exam_month exam_day
Umění NULL NULL NULL
Matematika 2019 Prosinec 19
Zdraví 2020 leden 5
Věda 2020 leden 5
Angličtina 2020 leden 8

Diskuse:

Chcete-li seřadit podle data, vytvořte hodnoty data z hodnot roku, měsíce a dne. Chcete-li to provést, použijte funkci STR_TO_DATE(). Pokud máte datum uložené jako řetězec v 'Year Month Day ', můžete jej přenést na datum pomocí STR_TO_DATE(date_string, '%Y %M %d') . Nejprve však musíte vytvořit řetězec pomocí funkce CONCAT():

CONCAT(exam_year, ' ', exam_month, ' ', exam_day)

CONCAT() funkce kombinuje všechny argumenty do jednoho řetězce. Nemusíte přenášet čísla do řetězců. Protože byste chtěli získat řetězec v 'Year Month Day ', argumenty jsou exam_year , exam_month , exam_day a mezery mezi nimi.

Poté musíte tento řetězec převést na datum pomocí STR_TO_DATE(date_string, '%Y %M %d') funkce. Druhým argumentem této funkce je formát data. %Y znamená rok, %M znamená měsíc (jeho celé jméno, nikoli číslo) a %d znamená den.

STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')

Použijte jej s ORDER BY klauzule k řazení řádků ve vzestupném pořadí 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 STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;

  1. Propojení Androidu s MS SQL SERVER 2008

  2. Tabulka chyb Mysql 1050 již existuje, i když ve skutečnosti neexistuje

  3. Propojení IBM DB2 se softwarem IRI

  4. Spusťte soubor PostgreSQL .sql pomocí argumentů příkazového řádku