sql >> Database >  >> RDS >> Mysql

Hoe te bestellen op datum in MySQL

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

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

onderwerp examendatum
Kunst NULL
Wiskunde 2019-12-19
Wetenschap 05-01-2020
Gezondheid 05-01-2020
Engels 2020-01-08

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

Merk op dat in MySQL, 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 exam_date worden in willekeurige volgorde weergegeven (u ziet mogelijk Science derde en Health vierde, of Health derde en Science vierde).

Voorbeeld 2:

Het exam tabel heeft de volgende kolommen:subject , exam_year , exam_month , en exam_day . De maanden worden gegeven in namen, niet in cijfers.

onderwerp examenjaar examen_maand 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 STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');

Het resultaat ziet er als volgt uit (de rijen zijn in oplopende volgorde gesorteerd op exam_year , exam_month , en exam_date ):

onderwerp examenjaar examen_maand examendag
Kunst NULL NULL NULL
Wiskunde 2019 december 19
Gezondheid 2020 Januari 5
Wetenschap 2020 Januari 5
Engels 2020 Januari 8

Discussie:

Als u op datum wilt sorteren, maakt u datumwaarden van het jaar, de maand en de dagwaarden. Gebruik hiervoor de functie STR_TO_DATE(). Als u een datum hebt opgeslagen als een tekenreeks in de 'Year Month Day ' formaat, kunt u het naar een datum casten met STR_TO_DATE(date_string, '%Y %M %d') . Maar eerst moet je een string maken met behulp van de CONCAT()-functie:

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

De CONCAT() functie combineert alle argumenten in één string. U hoeft geen getallen naar strings te casten. Omdat je een string wilt krijgen in de 'Year Month Day ' formaat, de argumenten zijn exam_year , exam_month , exam_day , en de spaties ertussen.

Vervolgens moet u deze tekenreeks converteren naar een datum met behulp van de STR_TO_DATE(date_string, '%Y %M %d') functie. Het tweede argument van deze functie is het datumformaat. %Y staat voor jaar, %M staat voor maand (de volledige naam, geen nummer), en %d staat voor dag.

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

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 STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;

  1. TO_SECONDS() Voorbeelden – MySQL

  2. Hoe BLOB- en CLOB-bestanden in MySQL in te voegen?

  3. Een WHERE IN doen op meerdere kolommen in Postgresql

  4. De Oracle-instantie afsluiten en starten