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

Jak objednávat podle názvu měsíce v MySQL

Problém:

Chcete seřadit řádky podle čísla měsíce, daných názvů měsíců (chcete, aby se jako první zobrazoval leden, jako poslední prosinec).

Příklad:

birthday tabulka obsahuje dva sloupce:jméno a birthday_month . Měsíce jsou uvedeny ve jménech, nikoli v číslech.p>

name narozeniny_měsíc
Ronan Tisha NULL
Prosinec 2020
Angie Julia Duben
Narelle Dillanová Duben
Purdie Casey leden
Donna Nell NULL
Blaze Graeme Říjen

Chcete seřadit řádky podle birthday_month .

Řešení:

SELECT *
FROM birthday
ORDER BY STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d');

Výsledek vypadá takto:

name narozeniny_měsíc
Donna Nell NULL
Purdie Casey leden
Angie Julia Duben
Narelle Dillanová Duben
Blaze Graeme Říjen
Ronan Tisha NULL
Prosinec Říjen

Diskuse:

Chcete-li objednat podle měsíce, vytvořte datum s tímto měsícem. 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 musíte vytvořit řetězec pomocí funkce CONCAT(). Rok může být libovolný rok (např. 0001 ) a den může být libovolný den (např. 01 ):

CONCAT('0001 ', birthday_month, ' 01')

CONCAT() funkce kombinuje všechny argumenty do jednoho řetězce. Řetězec by měl být v 'Year Month Day ', takže druhý argument by měl být birthday_month; první a třetí argument musí být pouze ve správném formátu.

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('0001 ', birthday_month, ' 01'), '%Y %M %d')

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 birthday
ORDER BY STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d') 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 birthday_month se zobrazují v náhodném pořadí (můžete vidět Angie Julia třetí a Narelle Dillan čtvrtý, nebo Narelle Dillan třetí a Angie Julia čtvrtý).


  1. Problém s občasným připojením Oracle JDBC

  2. Rozdíl mezi sys.views, sys.system_views a sys.all_views na serveru SQL Server

  3. Jak echo out řádky tabulky z db (php)

  4. Sladění nabídky a poptávky – Řešení, část 1