ISDATE (Transact-SQL)

如果 expression 是有效的 date、time 或 datetime 值,则返回 1;否则返回 0。

有关所有 Transact-SQL 日期和时间数据类型及函数的概述,请参阅日期和时间数据类型及函数 (Transact-SQL)。有关日期和时间数据类型及函数共有的信息和示例,请参阅使用日期和时间数据

主题链接图标Transact-SQL 语法约定

语法

ISDATE ( expression )

参数

  • expression
    字符串或者可以转换为字符串的表达式。表达式的长度不得超过 4,000 个字符。

返回类型

int

注释

只有与 CONVERT 函数一起使用,同时指定了 CONVERT 样式参数且样式不等于 0、100、9 或 109 时,ISDATE 才是确定的。

ISDATE 的返回值取决于 SET DATEFORMATSET LANGUAGEdefault language 选项设定的设置。有关示例,请参阅示例 C。

ISDATE 表达式格式

有关 ISDATE 将对其返回 1 的有效格式的示例,请参阅 datetimesmalldatetime 主题中的“datetime 支持的字符串文字格式”部分。有关其他示例,请参阅 CAST 和 CONVERT 的“参数”部分中的“输入/输出”列。

下表概括了无效的以及返回 0 或错误的输入表达式格式。

ISDATE 表达式

ISDATE 返回值

NULL

0

数据类型中除字符串、Unicode 字符串或日期和时间以外的任何数据类型类别中列出的数据类型值。

0

text、ntext 或 image 数据类型的值。

0

秒精度小数位数超过 3 的任何值(.0000 到 .0000000...n)

0

有效日期和无效值混在一起的任何值,例如 1995-10-1a。

0

示例

A. 使用 ISDATE 测试是否为有效的 datetime 表达式

下面的示例说明如何使用 ISDATE 测试某一字符串是否是有效的 datetime。

IF ISDATE('2009-05-12 10:19:41.177') = 1
    PRINT 'VALID'
ELSE
    PRINT 'INVALID'

B. 显示 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;