sql >> Database >  >> RDS >> SQLite

Hoe te bestellen op datum in SQLite

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 SQLite, 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 tweede en Health derde, of Health tweede en Science derde).

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

Oplossing:

SELECT *
FROM exam
ORDER BY exam_year,
 (CASE exam_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END),
  exam_day;

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

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:

Om de rijen op onderzoeksdatum te sorteren, moet u eerst op jaar sorteren, dan op numerieke maand (geen maandnaam) en tenslotte op dag. U kunt maandnamen converteren naar numerieke maanden met een CASE WHEN clausule. Na de CASE trefwoord, geef de naam van de kolom op. Vermeld vervolgens na elke WHEN de waarde in deze kolom, gebruik het THEN-sleutelwoord en geef de nieuwe waarde op die u wilt toewijzen in plaats van de oude. Hier is de kolom exam_month , de huidige waarden in deze kolom zijn 'January ', 'February ', ..., 'December ', en de nieuwe waarden zijn de numerieke maanden 1 , 2 , …, 12 . Vergeet niet om de END . te gebruiken nadat u klaar bent met het converteren van alle waarden trefwoord om de CASE WHEN . te sluiten clausule. Kijk eens:

CASE exam_month
  WHEN 'January' THEN 1
  WHEN 'February' THEN 2
  WHEN 'March' THEN 3
  WHEN 'April' THEN 4
  WHEN 'May' THEN 5
  WHEN 'June' THEN 6
  WHEN 'July' THEN 7
  WHEN 'August' THEN 8
  WHEN 'September' THEN 9
  WHEN 'October' THEN 10
  WHEN 'November' THEN 11
  WHEN 'December' THEN 12
END

Zo converteert u een maandnaam naar een maandnummer. U kunt het gebruiken bij het sorteren van de rijen op datum, dat wil zeggen op jaar, numerieke maand en dag.

ORDER BY exam_year,
 (CASE exam_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END),
  exam_day

Op deze manier kunt u de rijen in oplopende volgorde op datum sorteren. De NULL s wordt eerst weergegeven. Gebruik de DESC . om de volgorde te wijzigen in aflopend trefwoord na elke kolom in de ORDER BY clausule. Dit is hoe de hele zoekopdracht eruit zou moeten zien:

SELECT *
FROM exam
ORDER BY
  exam_year DESC,
  (CASE exam_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END) DESC,
  exam_day DESC;

Merk op dat bij het sorteren in aflopende volgorde in SQLite, NULL s worden als laatste weergegeven.


  1. GWFG in Oracle RAC

  2. Een SQL Server-tabel maken van een C#-gegevenstabel

  3. Hoe een array van Java terug te sturen naar PL/SQL?

  4. PostgreSQL 8.4 verleent DML-rechten op alle tabellen aan een rol