sql >> Databáze >  >> RDS >> Oracle

zkontrolujte platné datum, které je deklarováno ve varchar2

Raději opravím problém s designem jako trvalá oprava spíše než plýtvání časem na řešení.

Za prvé, NIKDY uložit DATE jako VARCHAR2 . Všechny tyto režie jsou způsobeny tím, že váš návrh je chybný .

'20100231'

Jak by to proboha mohlo být platné datum? Který kalendář má v ÚNORU 31 dní?

Postupujte takto:

  1. Přidejte nový sloupec s DATEM DATA TYPE.
  2. Aktualizujte nový sloupec hodnotami data ze starého sloupce pomocí TO_DATE .
  3. Proveďte požadovanou aritmetiku DATE v novém sloupci DATE nebo to zpracujte v příkazu UPDATE v samotném kroku 2.
  4. Zrušte starý sloupec.
  5. Přejmenujte nový sloupec na starý.

AKTUALIZACE Přidání ukázky

Nastavení

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>

Přidat nový sloupec:

SQL> ALTER TABLE t ADD (dt DATE);

Table altered.

SQL>

PROVEĎTE požadovanou aktualizaci

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>

Zkontrolujeme:

SQL> SELECT * FROM t;

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

SQL>

Vypustit starý sloupec:

SQL> ALTER TABLE t DROP COLUMN ymd;

Table altered.

SQL>

Přejmenujte nový sloupec na starý název sloupce

SQL> ALTER TABLE t RENAME COLUMN dt TO ymd;

Table altered.

SQL>

Právě jste problém vyřešili

SQL> SELECT * FROM t;

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


SQL>



  1. Nelze vytvořit požadovanou službu [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

  2. MariaDB ROWNUM() Vysvětleno

  3. Vraťte A, pokud se B pokazí. jarní bota, jdbctemplate

  4. Jak funguje SQLite Length()