Oracle
 sql >> Baza danych >  >> RDS >> Oracle

sprawdź poprawną datę, która jest zadeklarowana w varchar2

Raczej naprawię problem z projektem jako stałe rozwiązanie zamiast marnowania czasu na obejście problemu.

Po pierwsze NIGDY sklep DATA jako VARCHAR2 . Całe to obciążenie wynika z faktu, że Twój projekt jest wadliwy .

„20100231”

Jak, u licha, może to być ważna data? Który kalendarz ma 31 dni w LUTY?

Wykonaj następujące kroki:

  1. Dodaj nową kolumnę z DATA TYP DANYCH.
  2. Zaktualizuj nową kolumnę wartościami dat ze starej kolumny za pomocą TO_DATE .
  3. Wykonaj wymaganą arytmetykę DATE w nowej kolumnie DATE lub obsłuż to w instrukcji UPDATE w samym kroku 2.
  4. Upuść starą kolumnę.
  5. Zmień nazwę nowej kolumny na starą.

AKTUALIZUJ Dodawanie demonstracji

Konfiguracja

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>

Dodaj nową kolumnę:

SQL> ALTER TABLE t ADD (dt DATE);

Table altered.

SQL>

Wykonaj wymaganą aktualizację

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>

Sprawdźmy:

SQL> SELECT * FROM t;

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

SQL>

Upuść starą kolumnę:

SQL> ALTER TABLE t DROP COLUMN ymd;

Table altered.

SQL>

Zmień nazwę nowej kolumny na starą nazwę kolumny

SQL> ALTER TABLE t RENAME COLUMN dt TO ymd;

Table altered.

SQL>

Właśnie rozwiązałeś problem

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. Procedura składowana w przykładzie Oracle z parametrem IN OUT

  2. Struktura i typy bloków Oracle PLSQL

  3. Wypełnianie tabeli PL/SQL z bloku w Oracle D2k Forms

  4. Jak sprawdzić, czy istnieje procedura składowana?

  5. Java:odczytywanie obiektów Blob z Oracle