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

Bagaimana cara mendapatkan tanggal efektif saat ini di Oracle?

Jangan coba-coba, tapi buktikan sendiri :-)
Dan hanya dengan satu akses meja.

Meja Anda:

SQL> create table mytable (tid,tname,effectivedate)
  2  as
  3  select 1, 'A', date '2011-07-01' from dual union all
  4  select 2, 'A', date '2011-08-01' from dual union all
  5  select 3, 'A', date '2011-09-01' from dual union all
  6  select 4, 'A', date '2011-10-01' from dual union all
  7  select 5, 'B', date '2011-08-01' from dual union all
  8  select 6, 'B', date '2011-09-01' from dual union all
  9  select 7, 'B', date '2011-10-01' from dual union all
 10  select 8, 'C', date '2011-09-01' from dual
 11  /

Table created.

Dan dua kasus uji Anda:

SQL> var TODAY varchar2(10)
SQL> exec :TODAY := '2011-09-10'

PL/SQL procedure successfully completed.

SQL> select tid
  2       , tname
  3       , effectivedate
  4       , case
  5         when  to_date(:TODAY,'yyyy-mm-dd') >= effectivedate
  6           and to_date(:TODAY,'yyyy-mm-dd') < next_effectivedate
  7         then
  8           'Valid'
  9         when to_date(:TODAY,'yyyy-mm-dd') >= effectivedate
 10         then
 11           'Invalid'
 12         else
 13           'Inactive'
 14         end status
 15    from ( select tid
 16                , tname
 17                , effectivedate
 18                , lead(effectivedate,1,date '9999-12-31') over (partition by tname order by effectivedate) next_effectivedate
 19             from mytable
 20         )
 21  /

       TID T EFFECTIVEDATE       STATUS
---------- - ------------------- --------
         1 A 01-07-2011 00:00:00 Invalid
         2 A 01-08-2011 00:00:00 Invalid
         3 A 01-09-2011 00:00:00 Valid
         4 A 01-10-2011 00:00:00 Inactive
         5 B 01-08-2011 00:00:00 Invalid
         6 B 01-09-2011 00:00:00 Valid
         7 B 01-10-2011 00:00:00 Inactive
         8 C 01-09-2011 00:00:00 Valid

8 rows selected.

SQL> exec :TODAY := '2011-10-02'

PL/SQL procedure successfully completed.

SQL> select tid
  2       , tname
  3       , effectivedate
  4       , case
  5         when  to_date(:TODAY,'yyyy-mm-dd') >= effectivedate
  6           and to_date(:TODAY,'yyyy-mm-dd') < next_effectivedate
  7         then
  8           'Valid'
  9         when to_date(:TODAY,'yyyy-mm-dd') >= effectivedate
 10         then
 11           'Invalid'
 12         else
 13           'Inactive'
 14         end status
 15    from ( select tid
 16                , tname
 17                , effectivedate
 18                , lead(effectivedate,1,date '9999-12-31') over (partition by tname order by effectivedate) next_effectivedate
 19             from mytable
 20         )
 21  /

       TID T EFFECTIVEDATE       STATUS
---------- - ------------------- --------
         1 A 01-07-2011 00:00:00 Invalid
         2 A 01-08-2011 00:00:00 Invalid
         3 A 01-09-2011 00:00:00 Invalid
         4 A 01-10-2011 00:00:00 Valid
         5 B 01-08-2011 00:00:00 Invalid
         6 B 01-09-2011 00:00:00 Invalid
         7 B 01-10-2011 00:00:00 Valid
         8 C 01-09-2011 00:00:00 Valid

8 rows selected.

Salam,
Rob.




  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 agregat Oracle untuk mengembalikan nilai acak untuk grup?

  2. Bagaimana cara menghapus spasi kosong dari kueri SQL * Plus?

  3. Meminta Database Oracle dengan nama Tabel Dinamis

  4. Menghubungkan ke Oracle menggunakan ADO

  5. Cara mengoptimalkan kueri Oracle yang memiliki to_char di mana klausa untuk tanggal