В 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 | +--------------------------------------+