ISDATE (Transact-SQL)

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

如果 expression 为 datetime2 值,则 ISDATE 返回 0。

有关所有 Transact-SQL 日期和时间数据类型和函数的概述,请参阅日期和时间数据类型及函数 (Transact-SQL)。 请注意,日期时间数据的范围为 1753-01-01 至 9999-12-31,而日期数据的范围为 0001-01-01 至 9999-12-31。

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

语法

ISDATE ( expression )

参数

  • expression
    字符串或者可以转换为字符串的表达式。 表达式的长度不得超过 4,000 个字符。 不允许将日期和时间数据类型(datetime 和 smalldatetime 除外)作为 ISDATE 的参数。

返回类型

int

注释

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

ISDATE 的返回值取决于 SET DATEFORMATSET LANGUAGE配置默认语言服务器配置选项设定的设置。 有关示例,请参阅示例 C。

ISDATE 表达式格式

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

下表概述了无效的输入表达式格式(返回 0 或错误)。

ISDATE 表达式

ISDATE 返回值

NULL

0

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

0

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

0

秒精度小数位数超过 3 的任何值 (.0000 到 .0000000...n)。 如果 expression 为 datetime2 值,则 ISDATE 将返回 0;但如果 expression 为有效的 datetime 值,则将返回 1。

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;

请参阅

参考

CAST 和 CONVERT (Transact-SQL)