sql >> Databáze >  >> RDS >> Oracle

TO_CHAR(datetime) Funkce v Oracle

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 hodnotu DATE , TIMESTAMP , TIMESTAMP WITH TIME ZONE , TIMESTAMP WITH LOCAL TIME ZONE datový typ
  • interval může mít hodnotu INTERVAL DAY TO SECOND nebo INTERVAL YEAR TO MONTH datový typ
  • fmt 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 a TIMESTAMP 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:

  1. JDBC ResultSet získat sloupce s aliasem tabulky

  2. Příkaz SQL WHERE

  3. Zkopírujte data do nové tabulky v MySQL

  4. Smazat dotaz nefunguje v mysql