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

Функция TO_CHAR(datetime) в Oracle

В Oracle Database, TO_CHAR(datetime) функция преобразува стойност за дата и време или интервал в VARCHAR2 стойност във формата, посочен от формата на датата.

Синтаксис

Синтаксисът е така:

TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])

Къде:

  • datetime може да бъде стойност на DATE , TIMESTAMP , TIMESTAMP WITH TIME ZONE , TIMESTAMP WITH LOCAL TIME ZONE тип данни
  • interval може да бъде стойност на INTERVAL DAY TO SECOND , или INTERVAL YEAR TO MONTH тип данни
  • fmt е допълнителен модел на форматиране, който определя как трябва да бъде форматиран резултатът
  • 'nlsparam' е незадължителен аргумент, който определя езика, на който се връщат имената и съкращенията на месеци и дни.

Пример

Ето пример за демонстрация:

SELECT TO_CHAR(DATE '2035-09-26', 'DY, DD MONTH YYYY')
FROM DUAL;

Резултат:

WED, 26 SEPTEMBER 2035

И така, той върна датата, предоставена в първия аргумент, във формата, посочен от втория аргумент.

Вторият аргумент предоставя модела на формата. Форматният модел може да се състои от един или повече форматни елементи. Например DY е форматен елемент, както и DD , MONTH и др.

Вижте този пълен списък с елементи за формат на дата и час в Oracle за списък с елементи на формат, които могат да се използват за форматиране на стойности за дата и час с тази функция.

Формат по подразбиране

Ако пропуснете fmt аргумент, резултатът ще бъде преобразуван по следния начин:

  • DATE стойностите се преобразуват в стойности във формат за дата по подразбиране.
  • TIMESTAMP и TIMESTAMP WITH LOCAL TIME ZONE стойностите се преобразуват в стойности в стандартния формат за времеви отпечатъци.
  • TIMESTAMP WITH TIME ZONE стойностите се преобразуват в стойности в клеймото за време по подразбиране с формат на часовата зона.
  • Стойностите на интервала се преобразуват в числово представяне на интервалния литерал.

Ето пример за преобразуване на DATE стойност без посочване на формата:

SELECT TO_CHAR(DATE '2035-09-26')
FROM DUAL;

Резултат:

26/SEP/35

В този случай форматът на датата по подразбиране на моята сесия е DD/MON/RR , и така резултатът отразява това. Знам, че това е форматът на датата по подразбиране на моята сесия, защото поисках V$NLS_PARAMETERS изглед, който ми показва текущата стойност на NLS параметрите.

Вижте как да проверите стойностите на NLS параметрите, ако трябва да ги проверите.

Вижте също как да промените формата на датата на вашата сесия, ако искате да промените формата за дата и час по подразбиране за текущата си сесия.

Интервал

Ето пример, който извежда стойност на интервал във формат по подразбиране:

SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL;

Резултат:

+25-02

'nlsparam' Аргумент

'nlsparam' аргумент определя езика, на който се връщат имената и съкращенията на месеци и дни. Този аргумент може да има следната форма:

'NLS_DATE_LANGUAGE = language'

Пример:

SELECT 
    TO_CHAR(
        DATE '2035-09-26', 
        'DY, DD MONTH YYYY',
        'NLS_DATE_LANGUAGE = SPANISH'
    )
FROM DUAL;

Резултат:

MIÉ, 26 SEPTIEMBRE 2035

Нулеви аргументи

Предаването на null води до null :

SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;

Резултат:

null

По подразбиране SQLcl и SQL*Plus връщат празно пространство всеки път, когато null възниква в резултат на SQL SELECT изявление.

Можете обаче да използвате SET NULL за да посочите различен низ, който да бъде върнат. Тук посочих, че низът null трябва да бъдат върнати.

Липсващ аргумент

Извикването на функцията без предаване на аргументи води до грешка:

SELECT TO_CHAR()
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT TO_CHAR()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Предаването на твърде много аргументи също води до грешка:

SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL;

Резултат:

Error starting at line : 1 in command -
SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL
Error at Command Line : 1 Column : 72
Error report -
SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"
*Cause:    
*Action:

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете тип данни на полето в оператор select в ORACLE

  2. Грешка при използване на oracle.dataaccess.dll

  3. Защо променливата на oracle plsql varchar2 се нуждае от размер, но параметърът не?

  4. Как да разделя колона varchar като множество стойности в SQL?

  5. Извикване на съхранена функция (която връща масив от дефиниран от потребителя тип) в oracle през връзка към база данни