Oracle Database nám poskytuje možnost vrátit měsíc z data pomocí římských číslic.
Pokud je například měsíc srpen, jeho desetinná hodnota by byla 08 a jeho ekvivalent římským číslem by byl VIII.
Způsob, jak toho dosáhnout, je použít RM
nebo rm
formátovací prvek ve vaší masce formátu. Tím se měsíc naformátuje pomocí římských číslic na velká nebo malá písmena.
Zadání formátu data lze provést na několika místech.
Zadání římských číslic při volání funkce
Zde je příklad zadání římských číslic při formátování data pomocí znaku TO_CHAR(datetime)
funkce:
SELECT TO_CHAR(DATE '2035-08-11', 'DD RM YYYY') FROM DUAL;
Výsledek:
11 VIII 2035
V tomto případě jsem zadal velká římská čísla.
Chcete-li zadat malá písmena, jednoduše změňte RM
do rm
:
SELECT TO_CHAR(DATE '2035-08-11', 'DD rm YYYY') FROM DUAL;
Výsledek:
11 viii 2035
Úplný seznam prvků formátu, které lze použít k formátování hodnot datetime, naleznete v části Seznam prvků formátu Datetime v Oracle.
Určení římských číslic pro celou relaci
Alternativně můžete nastavit formát data pro celou relaci. To může být užitečné, pokud potřebujete provést mnoho volání funkcí, která vrátí datum.
Existují tři relevantní parametry:NLS_DATE_FORMAT
, NLS_TIMESTAMP_FORMAT
a NLS_TIMESTAMP_TZ_FORMAT
.
Tyto parametry mají výchozí hodnoty, které jsou odvozeny z NLS_TERRITORY
parametr (který má výchozí hodnotu, která je závislá na operačním systému). V případě potřeby však můžete kterýkoli z těchto parametrů pro aktuální relaci aktualizovat.
Zde je příklad aktualizace těchto parametrů na použití formátu data, který obsahuje římské číslice pro část měsíce:
ALTER SESSION SET NLS_DATE_FORMAT = 'DD RM YYYY';
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'DD RM YYYY HH12:MI:SSXFF AM';
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT = 'DD RM YYYY HH12:MI:SSXFF AM TZR';
Výsledek:
Session altered. Session altered. Session altered.
Nyní, když zavolám funkci, která vrací hodnotu datetime, dostanu měsíc v římských číslicích.
Příklad:
SELECT TO_CHAR(SYSDATE) FROM DUAL;
Výsledek:
10 VIII 2021
Všimněte si, že jsem prošel SYSDATE
na TO_CHAR()
.
Pokud to neudělám, NLS_DATE_FORMAT
parametr se neprojeví:
SELECT SYSDATE FROM DUAL;
Výsledek:
2021-08-10 20:04:49
U jiných formátů data tento problém neexistuje. Setkal jsem se s tím pouze u římských číslic.
Trvalejší řešení
Výše uvedené příklady představují dočasná řešení pro vrácení měsíce v římských číslicích. Pro trvalejší řešení lze parametry NLS nastavit na úrovni databáze, v souboru inicializačních parametrů nebo v proměnných prostředí. Viz Metody nastavení parametrů NLS a jejich priorit, kde jsou uvedeny příklady těchto parametrů a také jejich vzájemné pořadí priorit.