sql >> Databasteknik >  >> RDS >> Oracle

Hur man får århundradet från en dejt i Oracle

Med Oracle Database kan vi använda TO_CHAR(datetime) funktion för att returnera århundradet från ett datetime-värde.

För att göra detta kan vi använda antingen CC formatelement eller SCC formatelement. Vi kan kombinera dessa med andra formatelement för att göra saker som att visa ordningsnumret, stava århundradet osv.

Exempel

Här är ett exempel som använder CC formatelement för att returnera århundradet från ett datumvärde:

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

Resultat:

21

Negativa århundraden

Vi kan använda SCC formatera element för att inkludera minustecknet när ett negativt datum passerar:

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

Resultat:

-21

Ordningsnummer

Vi kan lägga till TH formatelement för att returnera århundradets ordningsnummer.

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

Resultat:

21ST

Vi kan också lägga till godtycklig text för att lägga till ordet "Century":

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

Resultat:

21ST Century

Observera att texten är omgiven av dubbla citattecken.

Vi kan använda versaler efter behov:

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

Resultat:

21ST Century

Lägg märke till att jag bara skrev det första tecknet med stor bokstav i formatmodellen. Vad jag menar är att jag använde Ccth istället för CCth . Även om du kanske tror att CCth bör resultera i gemena ordningstal, det är inte så det fungerar. Det här är vad som händer när vi gör det:

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

Resultat:

21ST Century

I grund och botten, när de två första tecknen i formatmodellen är versaler, blir resultatet versaler. Därför, för att skapa skiftläge i rubriken, skriv bara det första tecknet i formatmodellen med stor bokstav.

Stavad århundrade

Vi kan lägga till SP formatelement för att få århundradet preciserat:

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

Resultat:

TWENTY-FIRST Century

Och vi kan använda versaler efter behov:

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

Resultat:

TWENTY-FIRST Century

Vi kan utelämna TH formatspecifikation om vi inte vill ha ordningsnumret:

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

Resultat:

Twenty-One

20:e vs 2000-talet

Följande regler gäller när ett datum anses vara på 1900-talet kontra 2000-talet.

  • Om de två sista siffrorna i ett 4-siffrigt årtal är mellan 01 och 99 (inklusive), är århundradet ett större än de två första siffrorna i det året.
  • Om de två sista siffrorna i ett fyrsiffrigt årtal är 00, är ​​århundradet detsamma som de två första siffrorna i det året.

Samma koncept gäller för andra århundraden, såsom 1200-talet, 3000-talet, etc.

Exempel:

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;

Resultat:

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

Det finns många fler formatelement tillgängliga för att formatera datetime-värden i Oracle. Se Lista över Datetime Format Elements i Oracle för en fullständig lista.


  1. Hur använder man ANY istället för IN i en WHERE-klausul med Rails?

  2. Oracle SQL escape-tecken (för ett '&')

  3. Oracle-tabellen eller -vyn existerar inte inifrån den lagrade proceduren

  4. Kul med meddelanden