Oracle Database ни предоставя възможността да върнем месеца от дата с помощта на римски цифри.
Например, ако месецът е август, неговата десетична стойност ще бъде 08, а еквивалентът на римското число ще бъде VIII.
Начинът да направите това е да използвате RM
или rm
форматен елемент във вашата форматна маска. Това ще форматира месеца с помощта на римски цифри съответно с главни или малки букви.
Посочването на формата на датата може да се извърши на няколко места.
Посочете римски цифри при извикване на функция
Ето пример за определяне на римски цифри при форматиране на дата с TO_CHAR(datetime)
функция:
SELECT TO_CHAR(DATE '2035-08-11', 'DD RM YYYY') FROM DUAL;
Резултат:
11 VIII 2035
В този случай посочих главни римски цифри.
За да посочите малки букви, просто променете RM
към rm
:
SELECT TO_CHAR(DATE '2035-08-11', 'DD rm YYYY') FROM DUAL;
Резултат:
11 viii 2035
Вижте Списък с елементи за формат за дата и час в Oracle за пълен списък с елементи на формат, които могат да се използват за форматиране на стойности за дата и час.
Посочете римски цифри за цялата сесия
Като алтернатива можете да зададете формата на датата за цялата си сесия. Това може да бъде полезно, ако трябва да извършите много извиквания на функции, които връщат датата.
Има три подходящи параметъра:NLS_DATE_FORMAT
, NLS_TIMESTAMP_FORMAT
и NLS_TIMESTAMP_TZ_FORMAT
.
Тези параметри имат стойности по подразбиране, които са получени от NLS_TERRITORY
параметър (който има стойност по подразбиране, която зависи от операционната система). Можете обаче да актуализирате някой от тези параметри за текущата сесия, ако е необходимо.
Ето пример за актуализиране на тези параметри, за да се използва формат за дата, който включва римски цифри за частта от месеца:
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';
Резултат:
Session altered. Session altered. Session altered.
Сега, когато извикам функция, която връща стойност за дата и час, получавам месеца с римски цифри.
Пример:
SELECT TO_CHAR(SYSDATE) FROM DUAL;
Резултат:
10 VIII 2021
Забележете, че предадох SYSDATE
към TO_CHAR()
.
Ако не го направя, NLS_DATE_FORMAT
параметърът не влиза в сила:
SELECT SYSDATE FROM DUAL;
Резултат:
2021-08-10 20:04:49
Този проблем не съществува при други формати за дата. Срещнах го само с римски цифри.
По-постоянно решение
Горните примери са временни решения за връщане на месеца с римски цифри. За по-трайно решение, NLS параметрите могат да бъдат зададени на ниво база данни, във файла с параметри за инициализация или в променливи на средата. Вижте Методи за задаване на NLS параметри и техните приоритети за примери за тях, както и техния ред на приоритет един спрямо друг.