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

TO_DSINTERVAL() Fungsi di Oracle

Di Oracle Database, TO_DSINTERVAL() fungsi mengubah argumennya menjadi nilai INTERVAL DAY TO SECOND tipe data.

Sintaks

Sintaksnya seperti ini:

TO_DSINTERVAL ( ' { sql_format | ds_iso_format } ' 
  [ DEFAULT return_value ON CONVERSION ERROR ] )

Jadi, Anda memiliki opsi untuk meneruskan argumen dalam format SQL atau format ISO.

Inilah perbedaannya:

  • sql_format adalah format interval SQL yang kompatibel dengan standar SQL (ISO/IEC 9075).
  • ds_iso_format adalah format durasi ISO yang kompatibel dengan standar ISO 8601:2004.

Sintaks untuk sql_format seperti ini:

[+ | -] days hours : minutes : seconds [. frac_secs ]

Dimana:

  • days adalah bilangan bulat antara 0 dan 999999999
  • hours adalah bilangan bulat antara 0 dan 23
  • minutes dan seconds adalah bilangan bulat antara 0 dan 59
  • frac_secs adalah bagian pecahan detik antara .0 dan .999999999.
  • Satu atau lebih yang kosong memisahkan hari dari jam. Kosong tambahan diperbolehkan di antara elemen format.

Dan sintaks untuk ds_iso_format :

[-] P [days D]
  [T [hours H] [minutes M] [seconds [. frac_secs] S ] ]

Dimana:

  • days , hours , minutes dan seconds adalah bilangan bulat antara 0 dan 999999999.
  • frac_secs adalah bagian pecahan detik antara .0 dan .999999999.
  • Nilai tidak boleh kosong.
  • Jika Anda menentukan T , maka Anda harus menentukan setidaknya satu dari hours , minutes , atau seconds nilai.

Contoh

Berikut adalah beberapa contoh untuk ditunjukkan.

Format SQL

Di sini, saya menyampaikan argumen dalam format SQL:

SELECT TO_DSINTERVAL('135 08:35:47.123456789')
FROM DUAL;

Hasil:

+135 08:35:47.123456789

Kita bisa mengawalinya dengan tandanya jika perlu. Mari kita ubah menjadi negatif:

SELECT TO_DSINTERVAL('-135 08:35:47.123456789')
FROM DUAL;

Hasil:

-135 08:35:47.123456789

Format ISO

Dalam contoh ini saya memberikan nilai yang sama, tetapi dalam format ISO:

SELECT TO_DSINTERVAL('P135DT08H35M47.123456789S')
FROM DUAL;

Hasil:

+135 08:35:47.123456789

Ini dia dengan nilai negatif:

SELECT TO_DSINTERVAL('-P135DT08H35M47.123456789S')
FROM DUAL;

Hasil:

-135 08:35:47.123456789

Berikan Nilai Default pada Kesalahan Konversi

Anda juga memiliki opsi untuk memberikan nilai yang akan dikembalikan jika terjadi kesalahan saat mengonversi argumen ke INTERVAL DAY TO SECOND ketik.

Contoh:

SELECT 
    TO_DSINTERVAL(
    'Oops!'
    DEFAULT '00 00:00:00' ON CONVERSION ERROR
    )
FROM DUAL;

Hasil:

+00 00:00:00.000000

Argumen Null

Melewati null menghasilkan null :

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

Hasil:

null

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.

Jumlah Argumen Tidak Valid

Memanggil fungsi tanpa meneruskan argumen apa pun, menghasilkan kesalahan:

SELECT TO_DSINTERVAL()
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT TO_DSINTERVAL()
FROM DUAL
Error at Command Line : 1 Column : 8
Error report -
SQL Error: ORA-00938: not enough arguments for function
00938. 00000 -  "not enough arguments for function"
*Cause:    
*Action:

Dan meneruskan terlalu banyak argumen menghasilkan kesalahan:

SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL;

Hasil:

Error starting at line : 1 in command -
SELECT TO_DSINTERVAL('P135D', 'P135D')
FROM DUAL
Error report -
ORA-12702: invalid NLS parameter string used in SQL 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. Fungsi daftar ORACLE SQL

  2. Apakah ada rekomendasi resmi Oracle tentang penggunaan eksplisit ANSI JOIN vs implisit join?

  3. Jalankan SQL dari file batch

  4. Setara dengan tabel eksternal Oracle di SQL Server

  5. Oracle:Bagaimana cara mengetahui apakah ada transaksi yang tertunda?