Di Oracle Database, TO_TIMESTAMP()
fungsi mengubah argumennya menjadi nilai TIMESTAMP
tipe data.
Sintaks
Sintaksnya seperti ini:
TO_TIMESTAMP(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 default TIMESTAMP
tipe data, yang ditentukan oleh NLS_TIMESTAMP_FORMAT
parameter inisialisasi (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_TIMESTAMP(
'25-Aug-2030 18:10:35.123456789',
'DD-Mon-RRRR HH24:MI:SS.FF'
)
FROM DUAL;
Hasil:
25/AUG/30 06:10:35.123456789 PM
Format hasil ditentukan oleh NLS_TIMESTAMP_FORMAT
sesi Anda parameter. Kita dapat memeriksa nilai NLS_TIMESTAMP_FORMAT
parameter dengan menanyakan V$NLS_PARAMETERS
lihat:
SELECT VALUE
FROM V$NLS_PARAMETERS
WHERE PARAMETER = 'NLS_TIMESTAMP_FORMAT';
Hasil:
DD/MON/RR HH12:MI:SSXFF AM
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_TIMESTAMP(
'25-Aug-2030 18:10:35.123456789',
'DD-Mon-RRRR HH24:MI:SS.FF'
)
FROM DUAL;
Hasil:
25-AUG-30 06.10.35.123456789 PM
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_TIMESTAMP(
'25-AUG-30 06.10.35.123456789 PM'
)
FROM DUAL;
Hasil:
25-AUG-30 06.10.35.123456789 PM
Saat melakukan ini, argumen harus dalam format default TIMESTAMP
tipe data, yang ditentukan oleh NLS_TIMESTAMP_FORMAT
parameter inisialisasi.
Berikut adalah contoh yang terjadi saat kami memberikan nilai yang tidak sesuai dengan format ini:
SELECT
TO_TIMESTAMP(
'25-Aug-2030 18:10:35.123456789'
)
FROM DUAL;
Hasil:
ORA-01849: hour must be between 1 and 12 01849. 00000 - "hour must be between 1 and 12" *Cause: *Action:
Dalam hal ini, saya memberikan nilai yang menggunakan waktu 24 jam, tetapi NLS_TIMESTAMP_FORMAT
saya parameter menentukan jam 12 jam dengan penunjuk AM/PM.
Untuk memperbaikinya, saya perlu mengubah input saya, atau mengubah nilai NLS_TIMESTAMP_FORMAT
parameter.
Berikan Nilai Default pada Kesalahan Konversi
Anda juga memiliki opsi untuk memberikan nilai yang akan dikembalikan jika terjadi kesalahan saat mengonversi argumen ke TIMESTAMP
ketik.
Contoh:
SET NULL 'null';
SELECT
TO_TIMESTAMP(
'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_TIMESTAMP(
'25-agosto-2030 18:10:35.123456789',
'DD-Month-RRRR HH24:MI:SS.FF',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
Hasil:
25-AUG-30 06.10.35.123456789 PM
Perhatikan bahwa hasilnya masih dikembalikan sesuai dengan NLS_TIMESTAMP_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_TIMESTAMP(
'25-August-2030 18:10:35.123456789',
'DD-Month-RRRR HH24:MI:SS.FF',
'NLS_DATE_LANGUAGE = SPANISH'
)
FROM DUAL;
Hasil:
ORA-01843: not a valid month 01843. 00000 - "not a valid month" *Cause: *Action:
Ini terjadi karena saya tidak memberikan tanggal dalam bahasa yang ditentukan oleh 'nlsparam'
argumen (Spanyol).
Mengubahnya menjadi English
memecahkan masalah ini:
SELECT
TO_TIMESTAMP(
'25-August-2030 18:10:35.123456789',
'DD-Month-RRRR HH24:MI:SS.FF',
'NLS_DATE_LANGUAGE = English'
)
FROM DUAL;
Hasil:
25-AUG-30 06.10.35.123456789 PM
Lihat Cara Mengembalikan Daftar Bahasa yang Didukung di Oracle jika itu membantu.
Argumen Null
Melewati null
menghasilkan null
:
SET NULL 'null';
SELECT
TO_TIMESTAMP(null)
FROM DUAL;
Hasil:
null
Jumlah Argumen Tidak Valid
Memanggil fungsi tanpa meneruskan argumen apa pun menghasilkan kesalahan:
SELECT TO_TIMESTAMP()
FROM DUAL;
Hasil:
ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function" *Cause: *Action: Error at Line: 8 Column: 8
Namun, memberikan terlalu banyak argumen tampaknya tidak menimbulkan masalah, selama tiga yang pertama valid:
SELECT
TO_TIMESTAMP(
'25-Aug-2030 18:10:35.123456789',
'DD-Mon-RRRR HH24:MI:SS.FF',
'NLS_DATE_LANGUAGE = English',
'Oops!',
'Dang!',
'Homer',
'Symptom'
)
FROM DUAL;
Hasil:
25-AUG-30 06.10.35.123456789 PM