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.