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

periksa tanggal valid yang dideklarasikan di varchar2

Saya lebih suka memperbaiki masalah desain sebagai perbaikan permanen daripada membuang-buang waktu untuk solusi.

Pertama, TIDAK PERNAH simpan TANGGAL sebagai VARCHAR2 . Semua overhead ini disebabkan oleh fakta bahwa desain Anda cacat .

'20100231'

Bagaimana mungkin itu bisa menjadi tanggal yang valid? Kalender mana yang memiliki 31 hari di bulan FEBRUARI?

Ikuti langkah-langkah berikut:

  1. Tambahkan kolom baru dengan JENIS DATA TANGGAL.
  2. Perbarui kolom baru dengan nilai tanggal dari kolom lama menggunakan TO_DATE .
  3. Lakukan aritmatika DATE yang diperlukan pada kolom DATE yang baru, atau tangani ini dalam pernyataan UPDATE pada langkah 2 itu sendiri.
  4. Lepaskan kolom lama.
  5. Ganti nama kolom baru menjadi kolom lama.

PERBARUI Menambahkan demo

Penyiapan

SQL> CREATE TABLE t
  2      (ymd varchar2(8));

Table created.

SQL>
SQL> INSERT ALL
  2      INTO t (ymd)
  3           VALUES ('20101112')
  4      --INTO t (ymd)
  5      --     VALUES ('20100231')
  6      INTO t (ymd)
  7           VALUES ('20150101')
  8      INTO t (ymd)
  9           VALUES ('20160101')
 10  SELECT * FROM dual;

3 rows created.

SQL>
SQL> COMMIT;

Commit complete.

SQL>

Tambahkan kolom baru:

SQL> ALTER TABLE t ADD (dt DATE);

Table altered.

SQL>

Lakukan pembaruan yang diperlukan

SQL> UPDATE t
  2  SET dt =
  3    CASE
  4      WHEN to_date(ymd, 'YYYYMMDD') > SYSDATE
  5      THEN NULL
  6      ELSE to_date(ymd, 'YYYYMMDD')
  7    END;

3 rows updated.

SQL>
SQL> COMMIT;

Commit complete.

SQL>

Mari kita periksa:

SQL> SELECT * FROM t;

YMD      DT
-------- ---------
20101112 12-NOV-10
20150101 01-JAN-15
20160101

SQL>

Lepaskan kolom lama:

SQL> ALTER TABLE t DROP COLUMN ymd;

Table altered.

SQL>

Ganti nama kolom baru menjadi nama kolom lama

SQL> ALTER TABLE t RENAME COLUMN dt TO ymd;

Table altered.

SQL>

Anda baru saja memperbaiki masalah

SQL> SELECT * FROM t;

YMD
---------
12-NOV-10
01-JAN-15


SQL>



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ojdbc14.jar vs. ojdbc6.jar

  2. Pisahkan String menjadi baris Oracle SQL

  3. Alat untuk menghasilkan diagram database/diagram ER dari database Oracle yang ada?

  4. Oracle Joins - Perbandingan antara sintaks konvensional VS ANSI Syntax

  5. Praktik terbaik untuk pagination di Oracle?