ISDATE (Transact-SQL)

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

如果表达式是有效的 datetime 值,则返回 1;否则返回 0。

如果表达式为 datetime2 值,则 ISDATE 返回 0 。

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

Transact-SQL 语法约定

语法

ISDATE ( expression )

注意

若要查看 SQL Server 2014 (12.x) 及更早版本的 Transact-SQL 语法,请参阅早期版本文档

参数

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

返回类型

int

备注

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

ISDATE 的返回值取决于 SET DATEFORMATSET LANGUAGE配置默认语言服务器配置选项设定的设置。

ISDATE 表达式格式

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

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

ISDATE 表达式 ISDATE 返回值
Null 0
数据类型中除字符串、Unicode 字符串或日期和时间以外的任何数据类型类别中列出的数据类型值。 0
text、ntext 或 image 数据类型的值 。 0
秒精度小数位数超过 3 的任何值(.0000 到 .0000000...n)。 如果表达式为 datetime2 值,ISDATE 将返回 0,但如果表达式是有效的 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 DATEFORMATSET 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;  

示例:Azure Synapse Analytics 和 Analytics Platform System (PDW)

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

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

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

另请参阅

CAST 和 CONVERT (Transact-SQL)