Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да форматирате дати в Oracle

Тази статия съдържа често срещани примери за форматиране на дати в 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

Както се очаква, резултатът е на английски, който е езикът по подразбиране за текущата сесия.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да форматирате дати в Oracle

  2. SQL:как да използвам UNION и да поръчам по конкретен избор?

  3. Функция или процедура за клауза IN

  4. Как да изброите всички таблици в Oracle

  5. предаване на името на таблицата като параметър на plsql