Oracle
 sql >> Baza danych >  >> RDS >> Oracle

TO_DATE() Funkcja w Oracle

W bazie danych Oracle TO_DATE() funkcja konwertuje swój argument na wartość DATE typ danych.

Składnia

Składnia wygląda tak:

TO_DATE(char [ DEFAULT return_value ON CONVERSION ERROR ]
  [, fmt [, 'nlsparam' ] ])

char argument może być dowolnym wyrażeniem, którego wynikiem jest ciąg znaków o wartości CHAR , VARCHAR2 , NCHAR lub NVARCHAR2 typ danych.

Opcjonalny fmt określa format char . Jeśli pominiesz fmt , a następnie char musi mieć domyślny format daty. Domyślny format daty jest określony przez NLS_DATE_FORMAT parametr inicjalizacji, który sam jest domyślnie ustawiany przez NLS_TERRITORY parametr, ale można go również ustawić jawnie (zobacz Jak sprawdzić format daty sesji Oracle).

Opcjonalny 'nlsparam' argument określa język, w którym podawane są nazwy i skróty miesięcy i dni. Przybiera następującą formę:

'NLS_DATE_LANGUAGE = language'

Przykład

Oto podstawowy przykład do zademonstrowania:

SELECT 
    TO_DATE(
        '25-Aug-2030', 
        'DD-Mon-RRRR'
    )
FROM DUAL;

Wynik:

25/AUG/30

Format wyniku jest określony przez NLS_DATE_FORMAT sesji parametr. Możemy sprawdzić wartość NLS_DATE_FORMAT parametr, wysyłając zapytanie do V$NLS_PARAMETERS widok:

SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_DATE_FORMAT';

Wynik:

DD/MON/RR

Domyślna wartość NLS_TIMESTAMP_FORMAT parametr pochodzi z NLS_TERRITORY parametr. W moim przypadku NLS_TERRITORY parametr to AUSTRALIA .

Oto, co się stanie, gdy zmienię NLS_TERRITORY do innego terytorium, a następnie wywołaj TO_TIMESTAMP() ponownie:

ALTER SESSION SET NLS_TERRITORY = 'AMERICA';
SELECT 
    TO_DATE(
        '25-Aug-2030', 
        'DD-Mon-RRRR'
    )
FROM DUAL;

Wynik:

25-AUG-30

Tym razem wynik zwracany jest w innym formacie.

Alternatywnie możesz zmienić wartość NLS_TIMESTAMP_FORMAT parametr bezpośrednio. Spowoduje to zmianę tego parametru bez wpływu na inne parametry. Zobacz Jak zmienić format daty w sesji Oracle, aby uzyskać więcej informacji i przykładów.

Format domyślny

W tym przykładzie pomijam fmt argument:

SELECT 
    TO_DATE(
        '25-AUG-30'
    )
FROM DUAL;

Wynik:

25-AUG-30

Kiedy to robisz, argument musi być w domyślnym formacie DATE typ danych, który jest określony przez NLS_DATE_FORMAT parametr inicjalizacji.

Oto przykład tego, co się dzieje, gdy przekazujemy wartość niezgodną z tym formatem:

SELECT 
    TO_DATE(
        '2030-08-25'
    )
FROM DUAL;

Wynik:

Error report -
ORA-01861: literal does not match format string

Aby to naprawić, musiałbym albo zmienić moje dane wejściowe, albo zmienić wartość NLS_DATE_FORMAT parametr.

Pomijanie modelu formatu generalnie nie jest dobrą praktyką. Innymi słowy, dobrą praktyką jest zawsze dostarczanie modelu formatu podczas korzystania z tej funkcji. Oto pełna lista elementów formatu daty i godziny, których można użyć podczas konstruowania modelu formatu.

Podaj wartość domyślną w przypadku błędu konwersji

Masz również możliwość podania wartości do zwrócenia w przypadku wystąpienia błędu podczas konwertowania argumentu na DATE typ.

Przykład:

SET NULL 'null';
SELECT 
    TO_DATE(
    'Oops!'
    DEFAULT null ON CONVERSION ERROR
    )
FROM DUAL;

Wynik:

null

W tym przypadku określiłem, że null powinien być zwracany w przypadku wystąpienia błędu konwersji.

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ć.

'nlsparam' Argument

Opcjonalny 'nlsparam' argument określa język, w którym podawane są nazwy i skróty miesięcy i dni. Przybiera następującą formę:

'NLS_DATE_LANGUAGE = language'

Przykład

SELECT 
    TO_DATE(
        '25-agosto-2030', 
        'DD-Month-RRRR',
        'NLS_DATE_LANGUAGE = SPANISH'
    )
FROM DUAL;

Wynik:

25-AUG-30

Zwróć uwagę, że wynik jest nadal zwracany zgodnie z NLS_DATE_FORMAT bieżącej sesji parametr. Po prostu wejście był w innym języku.

Oto, co się stanie, gdy zmienię agosto do August używając tego samego 'nlsparam' wartość:

SELECT 
    TO_DATE(
        '25-August-2030', 
        'DD-Month-RRRR',
        'NLS_DATE_LANGUAGE = SPANISH'
    )
FROM DUAL;

Wynik:

Error report -
ORA-01843: not a valid month

Stało się tak, ponieważ nie podałem daty w języku określonym przez 'nlsparam' argument (hiszpański).

Zmiana na English rozwiązuje ten problem:

SELECT 
    TO_DATE(
        '25-August-2030', 
        'DD-Month-RRRR',
        'NLS_DATE_LANGUAGE = English'
    )
FROM DUAL;

Wynik:

25-AUG-30

Zobacz, jak zwrócić listę obsługiwanych języków w Oracle, jeśli to pomaga.

Argumenty zerowe

Przekazywanie null wyniki w null :

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

Wynik:

null

Nieprawidłowa liczba argumentów

Wywołanie funkcji bez przekazywania jakichkolwiek argumentów skutkuje błędem:

SELECT TO_DATE()
FROM DUAL;

Wynik:

SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"

Przekazywanie zbyt wielu argumentów również skutkuje błędem:

SELECT 
    TO_DATE(
        '25-Aug-2030', 
        'DD-Mon-RRRR',
        'NLS_DATE_LANGUAGE = English',
        'Gosh',
        'Dang'
    )
FROM DUAL;

Wynik:

SQL Error: ORA-00939: too many arguments for function
00939. 00000 -  "too many arguments for function"

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego nie mogę wprowadzić tej daty do tabeli za pomocą sql?

  2. Zainstaluj Oracle SQL Developer 19.1 w systemie Mac OS z JDK 8

  3. Jak zainstalować pakiet ROracle na Windows 7?

  4. Programista SQL 4

  5. Instrukcje krok po kroku dotyczące instalacji Oracle Virtual Box