В SQL Server можете да използвате ISDATE() функция за проверка дали дадена стойност е валидна дата.
За да бъдем по-конкретни, тази функция проверява само дали стойността е валидна дата , време или дата и час стойност, но не datetime2 стойност. Ако предоставите datetime2 стойност, ISDATE() ще ви каже, че не е дата (ще върне 0 ).
Тази статия съдържа примери за тази функция.
Синтаксис
Първо, ето синтаксиса:
ISDATE ( expression )
Където expression е изразът, който трябва да се тества.
Пример 1 – Валидна дата
Ето пример за използване на валиден израз:
SELECT ISDATE('2000-01-01') AS Result; Резултат:
+----------+ | Result | |----------| | 1 | +----------+
Това връща 1 , което означава, че е валидна дата , време или дата и час стойност.
Пример 2 – Невалидна дата
Ето пример с невалиден израз:
SELECT ISDATE('2000-01-01 00:00:00.0000000') AS Result; Резултат:
+----------+ | Result | |----------| | 0 | +----------+
Това връща 0 , което означава, че не е валидна дата , време или дата и час стойност.
Пример 3 – Използване на връщаната стойност
Можете да използвате условен израз, за да използвате връщаната стойност (вместо просто да показвате 0 или 1 ).
Ето един основен пример, в който просто отпечатваме Валидна дата или Невалидна дата , в зависимост от това дали връщаната стойност е 1 или 0 :
IF ISDATE('2000-01-01') = 1
PRINT 'Valid Date'
ELSE
PRINT 'Invalid Date'; Резултат:
Valid Date
Пример 4 – Вашите настройки за ЕЗИК
Връщаната стойност на ISDATE() зависи от вашия LANGUAGE и DATEFORMAT настройки.
Ето пример, за да демонстрирате как една и съща стойност може да върне различни резултати в зависимост от LANGUAGE използвана настройка.
Британски
SET LANGUAGE British;
SELECT ISDATE('20/01/2000') AS '20/01/2000 in British'; Резултат:
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'; Резултат:
Changed language setting to us_english. +----------------------------+ | 20/01/2000 in us_english | |----------------------------| | 0 | +----------------------------+
Това се случва, защото British използва дд/мм/гггг формат, докато us_english използва MM/dd/yyy .
Пример 5 – Вашите настройки на DATEFORMAT
Както споменахме, връщаната стойност на ISDATE() също зависи от вашия DATEFORMAT настройки.
Ето пример, за да демонстрирате как една и съща стойност може да върне различни резултати в зависимост от DATEFORMAT използвана настройка.
dmy
SET DATEFORMAT dmy;
SELECT ISDATE('20/01/2000') AS '20/01/2000 while DATEFORMAT is dmy'; Резултат:
+--------------------------------------+ | 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'; Резултат:
+--------------------------------------+ | 20/01/2000 while DATEFORMAT is mdy | |--------------------------------------| | 0 | +--------------------------------------+