V databázi Oracle TO_CHAR(datetime)
funkce převede hodnotu data a času nebo intervalu na VARCHAR2
hodnotu ve formátu určeném formátem data.
Syntaxe
Syntaxe vypadá takto:
TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])
Kde:
datetime
může mít hodnotuDATE
,TIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
datový typinterval
může mít hodnotuINTERVAL
DAY
TO
SECOND
neboINTERVAL
YEAR
TO
MONTH
datový typfmt
je volitelný model formátu, který určuje, jak má být výsledek formátován'nlsparam'
je volitelný argument, který určuje jazyk, ve kterém jsou vráceny názvy měsíců a dnů a zkratky.
Příklad
Zde je příklad k demonstraci:
SELECT TO_CHAR(DATE '2035-09-26', 'DY, DD MONTH YYYY')
FROM DUAL;
Výsledek:
WED, 26 SEPTEMBER 2035
Takže vrátil datum, které bylo zadáno v prvním argumentu, ve formátu určeném druhým argumentem.
Druhý argument poskytuje model formátu. Model formátu se může skládat z jednoho nebo více prvků formátu. Například DY
je prvek formátu, stejně jako DD
, MONTH
, atd.
V tomto úplném seznamu prvků formátu Datetime v Oracle najdete seznam prvků formátu, které lze použít k formátování hodnot datetime pomocí této funkce.
Výchozí formát
Pokud vynecháte fmt
argument, bude výsledek převeden následovně:
DATE
hodnoty jsou převedeny na hodnoty ve výchozím formátu data.TIMESTAMP
aTIMESTAMP
WITH
LOCAL
TIME
ZONE
hodnoty jsou převedeny na hodnoty ve výchozím formátu časového razítka.TIMESTAMP
WITH
TIME
ZONE
hodnoty jsou převedeny na hodnoty ve výchozím časovém razítku s formátem časového pásma.- Hodnoty intervalů jsou převedeny na číselné vyjádření intervalového literálu.
Zde je příklad převodu DATE
hodnota bez určení formátu:
SELECT TO_CHAR(DATE '2035-09-26')
FROM DUAL;
Výsledek:
26/SEP/35
V tomto případě je výchozí formát data mé relace DD/MON/RR
a výsledek to odráží. Vím, že toto je výchozí formát data mé relace, protože jsem se zeptal na V$NLS_PARAMETERS
view, který mi ukazuje aktuální hodnotu parametrů NLS.
Pokud je potřebujete zkontrolovat, viz Jak zkontrolovat hodnoty parametrů NLS.
Chcete-li změnit výchozí formát data a času pro aktuální relaci, přečtěte si také část Jak změnit formát data relace.
Interval
Zde je příklad, který zobrazuje hodnotu intervalu ve výchozím formátu:
SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL;
Výsledek:
+25-02
'nlsparam'
Argument
'nlsparam'
argument určuje jazyk, ve kterém jsou vráceny názvy měsíců a dnů a zkratky. Tento argument může mít následující tvar:
'NLS_DATE_LANGUAGE = language'
Příklad:
SELECT
TO_CHAR(
DATE '2035-09-26',
'DY, DD MONTH YYYY',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
Výsledek:
MIÉ, 26 SEPTIEMBRE 2035
Nulové argumenty
Předávání null
výsledkem je null
:
SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;
Výsledek:
null
Ve výchozím nastavení vrátí SQLcl a SQL*Plus prázdné místo vždy, když null
dochází v důsledku SQL SELECT
prohlášení.
Můžete však použít SET NULL
určit jiný řetězec, který má být vrácen. Zde jsem uvedl, že řetězec null
by měl být vrácen.
Chybí argument
Volání funkce bez předání jakýchkoli argumentů má za následek chybu:
SELECT TO_CHAR()
FROM DUAL;
Výsledek:
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:
Předání příliš mnoha argumentů také vede k chybě:
SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL;
Výsledek:
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: