sql >> Databasteknik >  >> RDS >> Oracle

Reguljärt uttryck av ett specifikt datumformat

Det här är en dålig idé. Den enda sättet att verifiera att ett datum är korrekt är att försöka konvertera det till ett datum. Om konverteringen misslyckas är det inte ett datum; om det är framgångsrikt kan det det vara. Datum är alldeles för komplexa för att ett vanligt språk ska kunna analysera.

Så skapa en funktion som omvandlar den till ett datum; du kan göra om mycket mer generisk än du har här, så den kan sedan återanvändas för andra ändamål:

create or replace function validate_date (
     PDate in varchar2
   , PDateFormat in varchar2
     ) return date is
begin
   return to_date(PDate, PDateFormat);
exception when others then
   return null;
end;

Detta returnerar ett datum om det kan verifiera att datum- och datumformatet matchar, annars returneras NULL om det finns något fel. Din fråga blir då:

select 'P' from dual where validate_date('20140506', 'yyyymmdd') is not null


  1. Pivoterar en tabell tillsammans med summan av kolumnvärdet när kolumntypen är nvarchar

  2. Infoga en tidsstämpel i databasen via ContentValues

  3. csv-uppladdningen fungerar inte

  4. mysqlexception hanterades inte - Det finns redan en öppen DataReader kopplad till denna anslutning som måste stängas först