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

TO_YMINTERVAL() Fungsi di Oracle

Di Oracle Database, TO_YMINTERVAL() fungsi mengubah argumennya menjadi nilai INTERVAL MONTH TO YEAR tipe data.

Sintaks

Sintaksnya seperti ini:

TO_YMINTERVAL
  ( '  { [+|-] years - months 
       | ym_iso_format 
       } '
    [ DEFAULT return_value ON CONVERSION ERROR ]
  )

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.

Dalam format SQL, years adalah bilangan bulat antara 0 dan 999999999, dan months adalah bilangan bulat antara 0 dan 11. Pengosongan tambahan diperbolehkan di antara elemen format.

Dalam format ISO (sintaks di bawah), tahun dan bulan adalah bilangan bulat antara 0 dan 999999999. Hari, hours , minutes , seconds , dan frac_secs adalah bilangan bulat non-negatif, dan diabaikan, jika ditentukan. Nilai tidak boleh kosong. Jika Anda menentukan T , maka Anda harus menentukan setidaknya satu dari hours , minutes , atau seconds nilai.

Sintaks untuk ds_iso_format seperti ini:

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

Contoh

Berikut adalah beberapa contoh untuk ditunjukkan.

Format SQL

Di sini, saya menyampaikan argumen dalam format SQL:

SELECT TO_YMINTERVAL('1-2')
FROM DUAL;

Hasil:

+01-02

Dalam hal ini, saya melewati satu tahun dua bulan dalam format SQL.

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

SELECT TO_YMINTERVAL('-1-2')
FROM DUAL;

Hasil:

-01-02

Format ISO

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

SELECT TO_YMINTERVAL('P1Y2M')
FROM DUAL;

Hasil:

+01-02

Ini dia dengan nilai negatif:

SELECT TO_YMINTERVAL('-P1Y2M')
FROM DUAL;

Hasil:

-01-02

Berikan Nilai Default pada Kesalahan Konversi

Anda juga memiliki opsi untuk memberikan nilai yang akan dikembalikan jika ada kesalahan saat mengonversi argumen ke INTERVAL MONTH TO YEAR ketik.

Contoh:

SELECT 
    TO_YMINTERVAL(
    '1y-02m'
    DEFAULT '00-00' ON CONVERSION ERROR
    )
FROM DUAL;

Hasil:

+00-00

Argumen Null

Melewati null menghasilkan null :

SET NULL 'null';
SELECT 
    TO_YMINTERVAL(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_YMINTERVAL()
FROM DUAL;

Hasil:

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

Dan meneruskan terlalu banyak argumen menghasilkan kesalahan:

SELECT TO_YMINTERVAL('P1Y2M', 'P3Y5M')
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. Memulai Pengembang Oracle SQL di MacOSX

  2. Jumlahkan kolom dengan nilai nol di Oracle

  3. ALL_PROCEDURE tampilan tidak menampilkan PROCEDURE_NAME

  4. varchar2(n BYTE|CHAR) default -> CHAR atau BYTE

  5. Bagaimana cara menghapus duplikat dari daftar yang dipisahkan koma dengan regex di Oracle tetapi saya tidak ingin nilai duplikat?