В 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: