W bazie danych Oracle TO_CHAR(datetime)
funkcja konwertuje datę i godzinę lub wartość interwału na VARCHAR2
wartość w formacie określonym przez format daty.
Składnia
Składnia wygląda tak:
TO_CHAR({ datetime | interval } [, fmt [, 'nlsparam' ] ])
Gdzie:
datetime
może być wartościąDATE
,TIMESTAMP
,TIMESTAMP
WITH
TIME
ZONE
,TIMESTAMP
WITH
LOCAL
TIME
ZONE
typ danychinterval
może być wartościąINTERVAL
DAY
TO
SECOND
lubINTERVAL
YEAR
TO
MONTH
typ danychfmt
jest opcjonalnym modelem formatu, który określa sposób formatowania wyniku'nlsparam'
jest opcjonalnym argumentem, który określa język, w którym zwracane są nazwy i skróty miesięcy i dni.
Przykład
Oto przykład do zademonstrowania:
SELECT TO_CHAR(DATE '2035-09-26', 'DY, DD MONTH YYYY')
FROM DUAL;
Wynik:
WED, 26 SEPTEMBER 2035
Zwrócił więc datę podaną w pierwszym argumencie, w formacie określonym przez drugi argument.
Drugi argument dostarcza model formatu. Model formatu może składać się z co najmniej jednego elementu formatu. Na przykład DY
jest elementem formatu, tak jak DD
, MONTH
itp.
Zapoznaj się z pełną listą elementów formatu daty i godziny w Oracle, aby zapoznać się z listą elementów formatu, których można użyć do formatowania wartości daty i godziny za pomocą tej funkcji.
Format domyślny
Jeśli pominiesz fmt
argument, wynik zostanie przekonwertowany w następujący sposób:
DATE
wartości są konwertowane na wartości w domyślnym formacie daty.TIMESTAMP
iTIMESTAMP
WITH
LOCAL
TIME
ZONE
wartości są konwertowane na wartości w domyślnym formacie znacznika czasu.TIMESTAMP
WITH
TIME
ZONE
wartości są konwertowane na wartości z domyślnym znacznikiem czasu w formacie strefy czasowej.- Wartości interwału są konwertowane na numeryczną reprezentację literału interwału.
Oto przykład konwersji DATE
wartość bez określenia formatu:
SELECT TO_CHAR(DATE '2035-09-26')
FROM DUAL;
Wynik:
26/SEP/35
W tym przypadku domyślny format daty mojej sesji to DD/MON/RR
, a więc wynik to odzwierciedla. Wiem, że jest to domyślny format daty mojej sesji, ponieważ zadałem zapytanie o V$NLS_PARAMETERS
widok, który pokazuje mi aktualną wartość parametrów NLS.
Zobacz Jak sprawdzić wartości parametrów NLS, jeśli chcesz je sprawdzić.
Zobacz także Jak zmienić format daty sesji, jeśli chcesz zmienić domyślny format daty i godziny dla bieżącej sesji.
Odstęp
Oto przykład, który wyświetla wartość interwału w domyślnym formacie:
SELECT TO_CHAR(INTERVAL '25-2' YEAR TO MONTH)
FROM DUAL;
Wynik:
+25-02
'nlsparam'
Argument
'nlsparam'
argument określa język, w którym zwracane są nazwy i skróty miesięcy i dni. Argument ten może mieć następującą postać:
'NLS_DATE_LANGUAGE = language'
Przykład:
SELECT
TO_CHAR(
DATE '2035-09-26',
'DY, DD MONTH YYYY',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
Wynik:
MIÉ, 26 SEPTIEMBRE 2035
Argumenty zerowe
Przekazywanie null
wyniki w null
:
SET NULL 'null';
SELECT TO_CHAR(null)
FROM DUAL;
Wynik:
null
Domyślnie SQLcl i SQL*Plus zwracają spację, gdy null
występuje w wyniku polecenia SQL SELECT
oświadczenie.
Możesz jednak użyć SET NULL
aby określić inny ciąg do zwrócenia. Tutaj określiłem, że ciąg null
należy zwrócić.
Brakujący argument
Wywołanie funkcji bez przekazywania żadnych argumentów powoduje błąd:
SELECT TO_CHAR()
FROM DUAL;
Wynik:
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:
Przekazywanie zbyt wielu argumentów również powoduje błąd:
SELECT TO_CHAR(DATE '2035-09-26', 'yy', 'NLS_DATE_LANGUAGE = spanish', 'oops!' )
FROM DUAL;
Wynik:
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: