sql >> Database >  >> RDS >> Oracle

Hoe te bestellen op datum in PostgreSQL of Oracle

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
Wiskunde 2019-12-19
Wetenschap 05-01-2020
Gezondheid 05-01-2020
Engels 2020-01-08
Kunst NULL

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 PostgreSQL en in Oracle, NULL s worden als laatste weergegeven bij het sorteren in oplopende volgorde en als eerste 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 Gezondheid 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

U wilt de rijen sorteren op examendatum.

Oplossing:

SELECT *
FROM exam
ORDER BY
  exam_year,
  EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')),
  exam_day;

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
Wiskunde 2019 december 19
Gezondheid 2020 Januari 5
Wetenschap 2020 Januari 5
Engels 2020 Januari 8
Kunst NULL NULL NULL

Discussie:

U moet de rijen rangschikken op drie waarden:het jaar, de maand en de dag, maar om de juiste volgorde te hebben, moet u de maand naar een getal converteren ('January ' naar 1 , 'February ' naar 2 , enzovoort.). Anders zou je 'December . zien ' voor 'January '. De TO_DATE(exam_month, 'Month') functie converteert de naam van de volledige maand naar een datum in de '0001-MM-01 ' formaat. U krijgt bijvoorbeeld '0001-12-01 ' voor december.

U kunt nu de functie EXTRACT(MAAND VANAF datum) gebruiken om de maand uit deze datumwaarde te extraheren. De maand wordt teruggegeven als een getal.

Door deze twee functies te combineren, kunt u de maand als een getal krijgen met behulp van de volgende formule:

EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))

Om de rijen op datum te sorteren, moet u sorteren op jaar, maand en dag (in deze volgorde). Als u eerst het laatste examen wilt zien, moet u in aflopende volgorde sorteren. Om dit te doen, moet je een DESC . gebruiken trefwoord na elke kolom in de ORDER BY clausule.

SELECT *
FROM exam
ORDER BY
  exam_year DESC,
  EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC,
  exam_day DESC;

  1. Hoe e-mail of telefoon fuzzy matchen door Elasticsearch?

  2. Een Enum-veld wijzigen met Alembic

  3. bulksgewijs invoegen van Java in Oracle

  4. Oracle Datetime-functies (volledige lijst)