ISDATE (Transact-SQL)
适用于:SQL Server Azure SQL 数据库 Azure SQL 托管实例 Azure Synapse Analytics Analytics 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。
语法
ISDATE ( expression )
参数
expression
字符串或者可以转换为字符串的表达式。 表达式的长度不得超过 4,000 个字符。 不允许将日期和时间数据类型(datetime 和 smalldatetime 除外)作为 ISDATE 的参数。
返回类型
int
备注
只有与 CONVERT 函数一起使用,同时指定了 CONVERT 样式参数且样式不等于 0、100、9 或 109 时,ISDATE 才是确定性的。
ISDATE 的返回值取决于 SET DATEFORMAT、SET LANGUAGE 和配置默认语言服务器配置选项设定的设置。
ISDATE 表达式格式
有关 ISDATE 将返回 1 的有效格式的示例,请参阅 datetime 和 smalldatetime 主题中的“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 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;
示例: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';