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"