I SQL Server kan du bruge ISDATE()
funktion til at kontrollere, om en værdi er en gyldig dato.
For at være mere specifik kontrollerer denne funktion kun, om værdien er en gyldig dato , tid eller datotid værdi, men ikke en datetime2 værdi. Hvis du angiver en datetime2 værdi, ISDATE()
vil fortælle dig, at det ikke er en dato (det vil returnere 0
).
Denne artikel indeholder eksempler på denne funktion.
Syntaks
Først her er syntaksen:
ISDATE ( expression )
Hvor expression
er det udtryk, der skal testes.
Eksempel 1 – Gyldig dato
Her er et eksempel, der bruger et gyldigt udtryk:
SELECT ISDATE('2000-01-01') AS Result;
Resultat:
+----------+ | Result | |----------| | 1 | +----------+
Dette returnerer 1
, hvilket betyder, at det er en gyldig dato , tid eller datotid værdi.
Eksempel 2 – Ugyldig dato
Her er et eksempel med et ugyldigt udtryk:
SELECT ISDATE('2000-01-01 00:00:00.0000000') AS Result;
Resultat:
+----------+ | Result | |----------| | 0 | +----------+
Dette returnerer 0
, hvilket betyder, at det ikke er en gyldig dato , tid eller datotid værdi.
Eksempel 3 – Brug af returværdien
Du kan bruge en betinget sætning til at gøre brug af returværdien (i stedet for blot at vise enten 0
eller 1
).
Her er et grundlæggende eksempel, hvor vi blot udskriver Gyldig dato eller Ugyldig dato , afhængigt af om returværdien er 1
eller 0
:
IF ISDATE('2000-01-01') = 1 PRINT 'Valid Date' ELSE PRINT 'Invalid Date';
Resultat:
Valid Date
Eksempel 4 – Dine LANGUAGE-indstillinger
Returværdien for ISDATE()
afhænger af dit LANGUAGE
og DATEFORMAT
indstillinger.
Her er et eksempel for at demonstrere, hvordan den samme værdi kan returnere forskellige resultater afhængigt af LANGUAGE
den anvendte indstilling.
britisk
SET LANGUAGE British; SELECT ISDATE('20/01/2000') AS '20/01/2000 in British';
Resultat:
Changed language setting to British. +-------------------------+ | 20/01/2000 in British | |-------------------------| | 1 | +-------------------------+
us_engelsk
SET LANGUAGE us_english; SELECT ISDATE('20/01/2000') AS '20/01/2000 in us_english';
Resultat:
Changed language setting to us_english. +----------------------------+ | 20/01/2000 in us_english | |----------------------------| | 0 | +----------------------------+
Dette sker, fordi British
bruger dd/MM/åååå formater mens us_english
bruger MM/dd/ååå .
Eksempel 5 – Dine DATEFORMAT-indstillinger
Som nævnt returnerer værdien ISDATE()
afhænger også af dit DATEFORMAT
indstillinger.
Her er et eksempel for at demonstrere, hvordan den samme værdi kan returnere forskellige resultater afhængigt af DATEFORMAT
den anvendte indstilling.
dmy
SET DATEFORMAT dmy; SELECT ISDATE('20/01/2000') AS '20/01/2000 while DATEFORMAT is dmy';
Resultat:
+--------------------------------------+ | 20/01/2000 while DATEFORMAT is dmy | |--------------------------------------| | 1 | +--------------------------------------+
mdy
SET DATEFORMAT mdy; SELECT ISDATE('20/01/2000') AS '20/01/2000 while DATEFORMAT is mdy';
Resultat:
+--------------------------------------+ | 20/01/2000 while DATEFORMAT is mdy | |--------------------------------------| | 0 | +--------------------------------------+