I SQL Server kan du använda ISDATE()
funktion för att kontrollera om ett värde är ett giltigt datum.
För att vara mer specifik kontrollerar den här funktionen bara om värdet är ett giltigt datum , tid , eller datumtid värde, men inte en datetime2 värde. Om du anger en datetime2 värde, ISDATE()
kommer att berätta för dig att det inte är ett datum (det kommer att returnera 0
).
Den här artikeln innehåller exempel på denna funktion.
Syntax
Först, här är syntaxen:
ISDATE ( expression )
Där expression
är uttrycket som ska testas.
Exempel 1 – Giltigt datum
Här är ett exempel med ett giltigt uttryck:
SELECT ISDATE('2000-01-01') AS Result;
Resultat:
+----------+ | Result | |----------| | 1 | +----------+
Detta returnerar 1
, vilket betyder att det är ett giltigt datum , tid , eller datumtid värde.
Exempel 2 – Ogiltigt datum
Här är ett exempel med ett ogiltigt uttryck:
SELECT ISDATE('2000-01-01 00:00:00.0000000') AS Result;
Resultat:
+----------+ | Result | |----------| | 0 | +----------+
Detta returnerar 0
, vilket betyder att det inte är ett giltigt datum , tid , eller datumtid värde.
Exempel 3 – Använda returvärdet
Du kan använda en villkorssats för att använda returvärdet (istället för att bara visa antingen 0
eller 1
).
Här är ett grundläggande exempel där vi helt enkelt skriver ut Giltigt datum eller Ogiltigt datum , beroende på om returvärdet är 1
eller 0
:
IF ISDATE('2000-01-01') = 1 PRINT 'Valid Date' ELSE PRINT 'Invalid Date';
Resultat:
Valid Date
Exempel 4 – Dina SPRÅKinställningar
Returvärdet för ISDATE()
beror på ditt LANGUAGE
och DATEFORMAT
inställningar.
Här är ett exempel för att visa hur samma värde kan ge olika resultat beroende på LANGUAGE
inställning som används.
brittisk
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_english
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 | +----------------------------+
Detta beror på att British
använder dd/MM/åååå format medan us_english
använder MM/dd/ååå .
Exempel 5 – Dina inställningar för DATUMFORMAT
Som nämnts, returvärdet för ISDATE()
beror också på ditt DATEFORMAT
inställningar.
Här är ett exempel för att visa hur samma värde kan returnera olika resultat beroende på DATEFORMAT
inställning som används.
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 | +--------------------------------------+