sql >> Database >  >> RDS >> Oracle

Hoe haal je de eeuw uit een datum in Oracle?

Met Oracle Database kunnen we de TO_CHAR(datetime) . gebruiken functie om de eeuw uit een datetime-waarde te retourneren.

Om dit te doen, kunnen we ofwel de CC format-element, of de SCC formaat element. We kunnen deze combineren met andere formaatelementen om dingen te doen zoals het rangtelwoord weergeven, de eeuw spellen, enz.

Voorbeeld

Hier is een voorbeeld dat de CC . gebruikt format-element om de eeuw uit een datumwaarde terug te geven:

SELECT TO_CHAR(DATE '2030-12-30', 'CC')
FROM DUAL;

Resultaat:

21

Negatieve eeuwen

We kunnen de SCC . gebruiken formaatelement om het minteken op te nemen bij het passeren van een negatieve datum:

SELECT TO_CHAR(DATE '-2030-12-30', 'SCC')
FROM DUAL;

Resultaat:

-21

Rangnummer

We kunnen de TH . toevoegen format-element om het rangtelwoord van de eeuw terug te geven.

SELECT TO_CHAR(DATE '2030-12-30', 'CCTH')
FROM DUAL;

Resultaat:

21ST

We kunnen ook willekeurige tekst toevoegen om het woord "Century" toe te voegen:

SELECT TO_CHAR(DATE '2030-12-30', 'CCTH "Century"')
FROM DUAL;

Resultaat:

21ST Century

Merk op dat de tekst tussen dubbele aanhalingstekens staat.

We kunnen hoofdletters gebruiken zoals vereist:

SELECT TO_CHAR(DATE '2030-12-30', 'Ccth "Century"')
FROM DUAL;

Resultaat:

21ST Century

Merk op dat ik alleen het eerste teken in het formaatmodel met een hoofdletter heb geschreven. Wat ik bedoel is dat ik Ccth . heb gebruikt in plaats van CCth . Hoewel je misschien denkt dat CCth zou moeten resulteren in een rangtelwoord in kleine letters, zo werkt het niet. Dit is wat er gebeurt als we dat doen:

SELECT TO_CHAR(DATE '2030-12-30', 'CCth "Century"')
FROM DUAL;

Resultaat:

21ST Century

Kortom, wanneer de eerste twee tekens van het formaatmodel hoofdletters zijn, is het resultaat hoofdletters. Schrijf daarom, om hoofdletters en kleine letters te produceren, alleen het eerste teken van het formaatmodel met een hoofdletter.

Gespelde eeuw

We kunnen de SP . toevoegen formaatelement om de eeuw te beschrijven:

SELECT TO_CHAR(DATE '2030-12-30', 'CCTHSP "Century"')
FROM DUAL;

Resultaat:

TWENTY-FIRST Century

En we kunnen hoofdletters gebruiken zoals vereist:

SELECT TO_CHAR(DATE '2030-12-30', 'Ccthsp "Century"')
FROM DUAL;

Resultaat:

Twenty-First Century

We kunnen de TH . weglaten formaatspecificatie als we het volgnummer niet willen:

SELECT TO_CHAR(DATE '2030-12-30', 'Ccsp')
FROM DUAL;

Resultaat:

Twenty-One

20e vs 21e eeuw

De volgende regels zijn van toepassing met betrekking tot wanneer een datum wordt beschouwd als in de 20e eeuw versus de 21e eeuw.

  • Als de laatste 2 cijfers van een jaartal van 4 cijfers tussen 01 en 99 liggen (inclusief), dan is de eeuw één groter dan de eerste 2 cijfers van dat jaar.
  • Als de laatste 2 cijfers van een jaartal van 4 cijfers 00 zijn, dan is de eeuw gelijk aan de eerste 2 cijfers van dat jaar.

Hetzelfde concept is van toepassing op andere eeuwen, zoals de 13e eeuw, 30e eeuw, enz.

Voorbeeld:

SELECT 
    TO_CHAR(DATE '1999-12-30', 'CC') AS "1999",
    TO_CHAR(DATE '2000-12-30', 'CC') AS "2000",
    TO_CHAR(DATE '1299-12-30', 'CC') AS "1299",
    TO_CHAR(DATE '1300-12-30', 'CC') AS "1300",
    TO_CHAR(DATE '2999-12-30', 'CC') AS "2999",
    TO_CHAR(DATE '3000-12-30', 'CC') AS "3000"
FROM DUAL;

Resultaat:

   1999    2000    1299    1300    2999    3000 
_______ _______ _______ _______ _______ _______ 
20      20      13      13      30      30     

Er zijn veel meer formaatelementen beschikbaar voor het opmaken van datetime-waarden in Oracle. Zie Lijst van Datetime Format Elements in Oracle voor een volledige lijst.


  1. Hoe de tabelnaam in een dynamische SQL-query in te stellen?

  2. MySql:MyISAM versus Inno DB!

  3. Top PostgreSQL-beveiligingsbedreigingen

  4. Hoe het interval tussen twee datums in PostgreSQL te vinden