Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

TO_DATE() Fungsi di Oracle

Di Oracle Database, TO_DATE() fungsi mengubah argumennya menjadi nilai DATE tipe data.

Sintaks

Sintaksnya seperti ini:

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

char argumen dapat berupa ekspresi apa pun yang dievaluasi ke string karakter CHAR , VARCHAR2 , NCHAR , atau NVARCHAR2 tipe data.

fmt . opsional menentukan format char . Jika Anda menghilangkan fmt , lalu char harus dalam format tanggal default. Format tanggal default ditentukan oleh NLS_DATE_FORMAT parameter inisialisasi, yang secara implisit ditetapkan oleh NLS_TERRITORY parameter, tetapi juga dapat diatur secara eksplisit (lihat Cara Memeriksa Format Tanggal Sesi Oracle Anda).

'nlsparam' opsional argumen menentukan bahasa di mana nama bulan dan hari dan singkatan disediakan. Bentuknya sebagai berikut:

'NLS_DATE_LANGUAGE = language'

Contoh

Berikut adalah contoh dasar untuk ditunjukkan:

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

Hasil:

25/AUG/30

Format hasil ditentukan oleh NLS_DATE_FORMAT sesi Anda parameter. Kami dapat memeriksa nilai NLS_DATE_FORMAT parameter dengan menanyakan V$NLS_PARAMETERS lihat:

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

Hasil:

DD/MON/RR

Nilai default NLS_TIMESTAMP_FORMAT parameter berasal dari NLS_TERRITORY parameter. Dalam kasus saya NLS_TERRITORY parameternya adalah AUSTRALIA .

Inilah yang terjadi ketika saya mengubah NLS_TERRITORY parameter ke wilayah lain, lalu panggil TO_TIMESTAMP() lagi:

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

Hasil:

25-AUG-30

Kali ini hasilnya dikembalikan dalam format yang berbeda.

Sebagai alternatif, Anda dapat mengubah nilai NLS_TIMESTAMP_FORMAT parameter secara langsung. Ini akan mengubah parameter tersebut tanpa mempengaruhi parameter lainnya. Lihat Cara Mengubah Format Tanggal di Sesi Oracle Anda untuk informasi dan contoh lebih lanjut.

Format Default

Dalam contoh ini saya menghilangkan fmt argumen:

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

Hasil:

25-AUG-30

Saat melakukan ini, argumen harus dalam format default DATE tipe data, yang ditentukan oleh NLS_DATE_FORMAT parameter inisialisasi.

Berikut adalah contoh yang terjadi saat kami memberikan nilai yang tidak sesuai dengan format ini:

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

Hasil:

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

Untuk memperbaikinya, saya perlu mengubah input saya, atau mengubah nilai NLS_DATE_FORMAT parameter.

Biasanya bukan praktik yang baik untuk menghilangkan model format. Dengan kata lain, praktik yang baik adalah selalu menyediakan model format saat menggunakan fungsi ini. Berikut adalah daftar lengkap elemen format datetime yang dapat digunakan saat membuat model format.

Berikan Nilai Default pada Kesalahan Konversi

Anda juga memiliki opsi untuk memberikan nilai yang akan dikembalikan jika terjadi kesalahan saat mengonversi argumen ke DATE ketik.

Contoh:

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

Hasil:

null

Dalam hal ini saya menetapkan bahwa null harus dikembalikan setiap kali ada kesalahan konversi.

Secara default, SQLcl dan SQL*Plus mengembalikan ruang kosong setiap kali null terjadi sebagai akibat dari SQL SELECT penyataan.

Namun, Anda dapat menggunakan SET NULL untuk menentukan string berbeda yang akan dikembalikan. Di sini saya menetapkan bahwa string null harus dikembalikan.

'nlsparam' Argumen

'nlsparam' opsional argumen menentukan bahasa di mana nama bulan dan hari dan singkatan disediakan. Bentuknya sebagai berikut:

'NLS_DATE_LANGUAGE = language'

Contoh

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

Hasil:

25-AUG-30

Perhatikan bahwa hasilnya masih dikembalikan sesuai dengan NLS_DATE_FORMAT sesi saat ini parameter. Hanya saja masukan dalam bahasa yang berbeda.

Inilah yang terjadi ketika saya mengubah agosto hingga August saat menggunakan 'nlsparam' yang sama nilai:

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

Hasil:

Error report -
ORA-01843: not a valid month

Ini terjadi karena saya tidak memberikan tanggal dalam bahasa yang ditentukan oleh 'nlsparam' argumen (Spanyol).

Mengubahnya menjadi English memecahkan masalah ini:

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

Hasil:

25-AUG-30

Lihat Cara Mengembalikan Daftar Bahasa yang Didukung di Oracle jika itu membantu.

Argumen Null

Melewati null menghasilkan null :

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

Hasil:

null

Jumlah Argumen Tidak Valid

Memanggil fungsi tanpa meneruskan argumen apa pun menghasilkan kesalahan:

SELECT TO_DATE()
FROM DUAL;

Hasil:

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

Dan meneruskan terlalu banyak argumen juga menghasilkan kesalahan:

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

Hasil:

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. OracleDataSource vs. Oracle UCP PoolDataSource

  2. Buat dan Konfigurasikan Oracle Linked Server di SQL Server

  3. Tentukan Oracle null ==null

  4. Contoh String dan Angka Oracle Concatenate

  5. Tidak dapat masuk ke database sebagai SYS dengan Oracle SQL Developer