ISDATE (Transact-SQL)
Возвращает 1, если expression является действительным значением date, time или datetime. В противном случае возвращает 0.
Функция ISDATE возвращает 0, если expression является значением datetime2.
Общие сведения обо всех типах данных и функциях даты и времени в языке Transact-SQL см. в разделе Типы данных и функции даты и времени (Transact-SQL). Обратите внимание, что диапазон значений типа datetime — от 01.01.1753 до 31.12.9999, а диапазон для date — от 01.01.0001 до 31.12.9999.
Применимо для следующих объектов: SQL Server (SQL Server 2008 по текущую версию), База данных SQL Windows Azure (С первоначального выпуска по текущий выпуск). |
Cинтаксические обозначения в Transact-SQL
Синтаксис
ISDATE ( expression )
Аргументы
- expression
Символьная строка или выражение, которое можно преобразовать в символьную строку. Выражение должно включать не более 4 000 символов. Типы данных даты и времени (за исключением типа datetime и smalldatetime), не разрешены к использованию в качестве аргумента функции ISDATE.
Возвращаемый тип
int
Замечания
Функция ISDATE детерминирована, только если используется совместно с функцией CONVERT и если заданный параметр стиля CONVERT не равен 0, 100, 9 или 109.
Возвращаемое значение ISDATE зависит от значений параметров SET DATEFORMAT, SET LANGUAGE и Настройка параметра конфигурации сервера «язык по умолчанию». Примеры см. в разделе Пример В.
Форматы выражения ISDATE
Примеры допустимых форматов, для которых функция ISDATE возвращает 1, см. в разделе «Поддерживаемые форматы строковых литералов для типа данных datetime» в разделах datetime и smalldatetime. Дополнительные примеры см. также в столбце Input/Output раздела «Аргументы» описаний функций CAST и CONVERT.
В следующей таблице приводятся недопустимые форматы входных выражений, для которых возвращается 0 или ошибка.
ISDATE, выражение |
Возвращенное значение ISDATE |
---|---|
NULL |
0 |
Значения типов данных, приведенные в списке Типы данных, в любой категории типов данных, кроме символьных строк, символьных строк в Юникоде и даты и времени. |
0 |
Значения типов данных text, ntext или image |
0 |
Любое значение, имеющее более трех позиций долей секунды (от 0,0000 до 0,0000000... n). Функция ISDATE возвращает 0, если expression имеет значение datetime2, и возвращает 1, если expression является допустимым значением datetime. |
0 |
Любое значение, сочетающее допустимую дату с недопустимым значением, например 1995-10-1a. |
0 |
Примеры
А.Использование функции ISDATE для проверки допустимого выражения datetime
Следующий пример показывает, как проверить с помощью функции ISDATE, является ли символьная строка допустимым значением datetime.
IF ISDATE('2009-05-12 10:19:41.177') = 1
PRINT 'VALID'
ELSE
PRINT 'INVALID';
Б.Влияние настроек SET DATEFORMAT и SET LANGUAGE на возвращаемые значения
Следующие инструкции возвращают значения, зависящие от настроек SET DATEFORMAT и SET LANGUAGE.
/* Use these sessions settings. */
SET LANGUAGE us_english;
SET DATEFORMAT mdy;
/* Expression in mdy dateformat */
SELECT ISDATE('04/15/2008'); --Returns 1.
/* Expression in mdy dateformat */
SELECT ISDATE('04-15-2008'); --Returns 1.
/* Expression in mdy dateformat */
SELECT ISDATE('04.15.2008'); --Returns 1.
/* Expression in myd dateformat */
SELECT ISDATE('04/2008/15'); --Returns 1.
SET DATEFORMAT mdy;
SELECT ISDATE('15/04/2008'); --Returns 0.
SET DATEFORMAT mdy;
SELECT ISDATE('15/2008/04'); --Returns 0.
SET DATEFORMAT mdy;
SELECT ISDATE('2008/15/04'); --Returns 0.
SET DATEFORMAT mdy;
SELECT ISDATE('2008/04/15'); --Returns 1.
SET DATEFORMAT dmy;
SELECT ISDATE('15/04/2008'); --Returns 1.
SET DATEFORMAT dym;
SELECT ISDATE('15/2008/04'); --Returns 1.
SET DATEFORMAT ydm;
SELECT ISDATE('2008/15/04'); --Returns 1.
SET DATEFORMAT ymd;
SELECT ISDATE('2008/04/15'); --Returns 1.
SET LANGUAGE English;
SELECT ISDATE('15/04/2008'); --Returns 0.
SET LANGUAGE Hungarian;
SELECT ISDATE('15/2008/04'); --Returns 0.
SET LANGUAGE Swedish;
SELECT ISDATE('2008/15/04'); --Returns 0.
SET LANGUAGE Italian;
SELECT ISDATE('2008/04/15'); --Returns 1.
/* Return to these sessions settings. */
SET LANGUAGE us_english;
SET DATEFORMAT mdy;