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

TO_TIMESTAMP() Fungsi di Oracle

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak ada lagi data untuk dibaca dari soket

  2. Urutan eksekusi kondisi dalam klausa 'di mana' SQL

  3. Fungsi TO_CHAR(datetime) di Oracle

  4. Tidak dapat terhubung ke database Oracle menggunakan JDBC jika kata sandi memiliki karakter khusus

  5. C# memanggil fungsi tersimpan oracle