sql >> Database teknologi >  >> RDS >> Oracle

tjek for gyldig dato, som er erklæret i varchar2

Jeg vil hellere løse designproblemet som en permanent løsning i stedet for at spilde tid på løsningen.

For det første ALDRIG butik DATE som VARCHAR2 . Alt dette overhead skyldes det faktum, at dit design er mangelfuldt .

'20100231'

Hvordan i alverden kunne det være en gyldig dato? Hvilken kalender har 31 dage i FEBRUAR?

Følg disse trin:

  1. Tilføj en ny kolonne med DATE DATA TYPE.
  2. Opdater den nye kolonne med datoværdier fra den gamle kolonne ved hjælp af TO_DATE .
  3. Udfør den nødvendige DATE-regning i den nye DATE-kolonne, eller håndter dette i UPDATE-sætningen i selve trin 2.
  4. Slip den gamle kolonne.
  5. Omdøb den nye kolonne til den gamle kolonne.

OPDATERING Tilføjelse af en demo

Opsætning

SQL> OPRET TABEL t 2 (ymd varchar2(8));Tabel oprettet.SQL>SQL> INDSÆT ALLE 2 I t (ymd) 3 VÆRDIER ('20101112') 4 --INTO t (ymd) 5 -- VALUES ('20100231') 6 INTO t (ymd) 7 VALUES ('20150101') 8 INTO t (ymd) 9 VALUES ('20160101') 10 VÆLG * FRA dual;3 rækker oprettet.SQL COMMITSQL>;Commit complete.SQL> 

Tilføj ny kolonne:

SQL> ÆNDRINGSTABEL t TILFØJ (dt DATO);Tabel ændret.SQL>

UDFØR den nødvendige opdatering

SQL> OPDATERING 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> 

Lad os tjekke:

SQL> VÆLG * FRA t;YMD DT-------- ----------20101112 12-NOV-1020150101 01-JAN-1520160101SQL>

Slip den gamle kolonne:

SQL> ÆNDRINGSTABEL t SLIP KOLONNE ymd;Tabel ændret.SQL> 

Omdøb den nye kolonne til det gamle kolonnenavn

SQL> ÆNDRINGSTABEL t OMNØV KOLONNE dt TIL ymd;Tabel ændret.SQL> 

Du har lige løst problemet

SQL> VÆLG * FRA t;YMD---------12-NOV-1001-JAN-15SQL> 



  1. Forbindelsen mislykkedes:Adgang nægtet for brugeren 'root'@'localhost' (ved hjælp af adgangskode:JA) fra php-funktionen

  2. En teknisk sammenligning:Microsoft Access 2016 vs SQL Server 2016

  3. Ret "dato er inkompatibel med int" i SQL Server, når du tilføjer til eller trækker fra en dato

  4. Tips til læse-/skrivelåse afhængigt af transaktionsisolationsniveau i MSSQL