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

Perbedaan antara nilai dua Tahun Bulan dan Hari di Oracle

Ketika Anda memikirkannya secara menyeluruh, Anda akan menyadari bahwa Anda tidak dapat menghitung perbedaan dua "interval waktu" ketika bulan berada di tempatnya; hanya karena pengurangan bulan dapat menghasilkan jumlah hari yang berbeda. Anda dapat mengurangi tahun, Anda dapat mengurangi minggu, Anda dapat mengurangi hari,... Anda dapat mengurangi hari ke detik, Anda dapat mengurangi tahun ke bulan. Namun, Anda tidak dapat mengurangi tahun ke hari.

Contoh:

SQL> select timestamp'1915-07-23 00:00:00' - timestamp'1907-09-12 00:00:00' as diff_day_to_second_interval from dual;

DIFF_DAY_TO_SECOND_INTERVAL
---------------------------
+000002871 00:00:00

Ini adalah 15 tahun, 7 bulan, 23 hari dikurangi 7 tahun, 9 bulan, 12 hari Anda berdasarkan pada 1 Januari 1900. Ini memberi kami perbedaan 2871 hari.

Namun, perhatikan dua contoh berikut, cukup digeser 1 dan 6 bulan ke masa lalu

select timestamp'1915-06-23 00:00:00' - timestamp'1907-08-12 00:00:00' as diff_day_to_second_interval from dual;

DIFF_DAY_TO_SECOND_INTERVAL
---------------------------
+000002872 00:00:00

select timestamp'1915-01-23 00:00:00' - timestamp'1907-03-12 00:00:00' as diff_day_to_second_interval from dual;

DIFF_DAY_TO_SECOND_INTERVAL
---------------------------
+000002874 00:00:00

SQL> 

Ini sekarang memberi kami perbedaan 2872 dan 2874 hari.

Sekarang, berbicara tentang kemungkinan pengurangan...

(a) mengurangkan interval tahun ke bulan

SQL> select interval'1915-07' year(4) to month - interval'1907-09' year(4) to month as diff_year_to_month_interval from dual;

DIFF_YEAR_TO_MONTH_INTERVAL
---------------------------
+000000007-10

select interval'1915-06' year(4) to month - interval'1907-08' year(4) to month as diff_year_to_month_interval from dual;

DIFF_YEAR_TO_MONTH_INTERVAL
---------------------------
+000000007-10

select interval'1915-01' year(4) to month - interval'1907-03' year(4) to month as diff_year_to_month_interval from dual;

DIFF_YEAR_TO_MONTH_INTERVAL
---------------------------
+000000007-10

SQL> 

Ketiganya dengan benar menghasilkan selisih 7 tahun 10 bulan.

(b) mengurangkan interval hari ke detik

SQL> select interval'15 01:02:03' day(2) to second - interval'07 02:03:04' day(2) to second as diff_day_to_second_interval from dual;

DIFF_DAY_TO_SECOND_INTERVAL
---------------------------
+000000007 22:58:59

select interval'14 00:01:02' day(2) to second - interval'06 01:02:03' day(2) to second as diff_day_to_second_interval from dual;

DIFF_DAY_TO_SECOND_INTERVAL
---------------------------
+000000007 22:58:59

select interval'09 11:12:13' day(2) to second - interval'01 12:13:14' day(2) to second as diff_day_to_second_interval from dual;

DIFF_DAY_TO_SECOND_INTERVAL
---------------------------
+000000007 22:58:59

SQL> 

Ketiganya menghasilkan hasil yang sama, karena ketiganya merupakan pengurangan interval hari ke detik dengan offset yang konsisten dari bagian hari/jam/menit/detik dari nilai interval.

(c) mengurangkan interval tahun-ke-hari

Seperti yang saya katakan:Tidak mungkin. Bahkan tidak ada interval tahun-ke-hari di Oracle; pembuat server DB tahu mengapa mereka memutuskan untuk tidak menambahkannya ke mesin.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - Cara memilih baris yang memiliki kolom dengan nilai maksimal di Oracle

  2. ADO.NET untuk menghubungkan Oracle Database di server

  3. Kecualikan nilai catatan dalam grup jika ada yang lain

  4. Operator ketidaksetaraan Oracle:=

  5. Kelas Pool Koneksi Oracle