Тази статия съдържа често срещани примери за форматиране на дати в Oracle Database.
Форматът на датата по подразбиране за вашата сесия се определя от различни параметри за инициализация на NLS (ето как да ги проверите). Можете да се възползвате от тези параметри, за да изведете форматиране, съобразено с локал.
Можете също да използвате функции като TO_CHAR(number)
за да конвертирате датите в низ и да ги форматирате точно както желаете в движение.
Формат на дата по подразбиране
Когато върнете дата в Oracle, по подразбиране тя се връща във формат за дата по подразбиране за текущата сесия.
Пример:
SELECT DATE '2030-12-10' FROM DUAL;
Резултат:
10/DEC/30
В този случай форматът на датата по подразбиране на моята сесия е DD/MON/RR
, и така резултатът отразява това.
Можете да промените формата, като промените NLS_TERRITORY
параметър (който имплицитно променя други параметри, като параметри за дата и час), или промяна на NLS_DATE_FORMAT
параметър директно.
Ето какво се случва, когато променя NLS_TERRITORY
параметър към друга територия:
ALTER SESSION SET NLS_TERRITORY = 'Germany';
SELECT DATE '2030-12-10' FROM DUAL;
Резултат:
10.12.30
Форматът на датата по подразбиране е актуализиран, за да отразява формата за този локал.
Има и други NLS параметри за дата и време, като NLS_TIME_FORMAT
, NLS_TIME_TZ_FORMAT
, NLS_TIMESTAMP_FORMAT
и NLS_TIMESTAMP_TZ_FORMAT
които трябва да сте наясно, когато променяте форматите за дата и час.
Вижте също как да промените формата на датата на вашата сесия, ако искате да промените формата за дата и час по подразбиране за текущата си сесия.
TO_CHAR()
Функция
Tтой TO_CHAR(datetime)
функцията приема стойност за дата и час и връща низ, форматиран по начин, който сте посочили.
Ето един бърз пример:
SELECT TO_CHAR(DATE '2035-09-26', 'Dy, DD Month YYYY')
FROM DUAL;
Резултат:
Wed, 26 September 2035
Тук функцията върна датата, предоставена в първия аргумент, във формата, посочен от втория аргумент.
Вторият аргумент предоставя модела на формата. Форматният модел може да се състои от един или повече форматни елементи. Например Dy
е форматен елемент, както и DD
, Month
и др.
Ако не посочите формат, той се връща с помощта на формата по подразбиране за сесията.
Вижте този пълен списък с елементи за формат на дата и час в Oracle за списък с елементи на формат, които могат да се използват за форматиране на стойности за дата и час с тази функция.
По-долу са дадени по-конкретни примери.
Върнете името на деня
Можете да върнете отделни части за дата, ако е необходимо. Например, можете да върнете само името на деня, само името на месеца и т.н. Всичко, което трябва да направите, е да използвате приложимия форматен елемент като единствен форматен елемент във вашия модел на формат.
Ето пример за връщане на името на деня:
SELECT TO_CHAR(DATE '2035-09-26', 'Day')
FROM DUAL;
Резултат:
Wednesday
В този случай върнах името на целия ден.
Можем да използваме Dy
като в предишния пример, за да върнете краткото име на деня:
SELECT TO_CHAR(DATE '2035-09-26', 'Dy')
FROM DUAL;
Резултат:
Wednesday
Върнете името на месеца
Ето пример за връщане на името на месеца:
SELECT TO_CHAR(DATE '2035-09-26', 'Month')
FROM DUAL;
Резултат:
September
И краткото име на месеца:
SELECT TO_CHAR(DATE '2035-09-26', 'Mon')
FROM DUAL;
Резултат:
Sep
Чувствителност на регистрите
В предишните примери пишехме главна буква за имената на деня и месеца.
Алтернативно можем да използваме всички главни букви, за да върнем имената на деня и месеца с главни букви, и всички малки букви, за да ги върнем с малки букви.
SELECT
TO_CHAR(DATE '2035-09-26', 'DY, Dy, dy')
FROM DUAL
UNION ALL
SELECT
TO_CHAR(DATE '2035-09-26', 'DAY, Day, day')
FROM DUAL
UNION ALL
SELECT
TO_CHAR(DATE '2035-09-26', 'MON, Mon, mon')
FROM DUAL
UNION ALL
SELECT
TO_CHAR(DATE '2035-09-26', 'MONTH, Month, month')
FROM DUAL;
Резултат:
WED, Wed, wed WEDNESDAY, Wednesday, wednesday SEP, Sep, sep SEPTEMBER, September, september
Език
NLS_DATE_LANGUAGE
параметърът се използва за определяне на езика на частите от датата, които са изписани (като имена на дни и имена на месеци). Стойността по подразбиране на този параметър се извлича от NLS_LANGUAGE
параметър.
Ето пример за актуализиране на NLS_DATE_LANGUAGE
параметър, след което връща форматирана дата, която включва името на деня и името на месеца:
ALTER SESSION SET NLS_DATE_LANGUAGE = 'Spanish';
SELECT TO_CHAR(DATE '2035-09-26', 'Dy, DD Month YYYY')
FROM DUAL;
Резултат:
Mié, 26 Septiembre 2035
Езикът може също да бъде изрично посочен от TO_CHAR()
самата функция. Това ви позволява временно да замените езиковите настройки по подразбиране за текущата сесия, без да засягате тези настройки.
Пример:
ALTER SESSION SET NLS_DATE_LANGUAGE = 'English';
SELECT TO_CHAR(
DATE '2035-09-26',
'Dy, DD Month YYYY',
'NLS_DATE_LANGUAGE = Spanish'
)
FROM DUAL;
Резултат:
Mié, 26 Septiembre 2035
В този пример настроих текущата си сесия да използва английски, след което изпълних заявка за извеждане на дата с помощта на испански.
Както беше споменато по-рано, извеждането на датата на испански не повлия на настройката на английски език. За да демонстрирам това, изпълних следната заявка веднага след тази (без да променям NLS_DATE_LANGUAGE
параметър).
SELECT TO_CHAR(
DATE '2035-09-26',
'Dy, DD Month YYYY'
)
FROM DUAL;
Резултат:
Wed, 26 September 2035
Както се очаква, резултатът е на английски, който е езикът по подразбиране за текущата сесия.