ISDATE (Transact-SQL)

如果 expression 是有效的 date、time 或 datetime 值,則傳回 1,否則傳回 0。

如果 expression 是 datetime2 值,ISDATE 會傳回 0。

如需所有 Transact-SQL 日期和時間資料類型與函數的概觀,請參閱<日期和時間資料類型與函數 (Transact-SQL)>。 請注意,datetime 資料範圍為 1753-01-01 到 9999-12-31,而 date 資料範圍是 0001-01-01 到 9999-12-31。

適用於:SQL Server (SQL Server 2008 透過目前版本)、Windows Azure SQL 資料庫 (初始版本,透過目前版本)。

主題連結圖示 Transact-SQL 語法慣例

語法

ISDATE ( expression )

引數

  • expression
    這是字元字串或可以轉換為字元字串的運算式。 此運算式的長度必須少於 4,000 個字元。 日期和時間資料類型 (但不包括 datetime 和 smalldatetime) 不允許做為 ISDATE 的引數。

傳回類型

int

備註

只有在搭配 CONVERT 函數使用、已指定 CONVERT 樣式參數,而且樣式不等於 0、100、9 或 109 時,ISDATE 才具有決定性。

ISDATE 的傳回值會根據 SET DATEFORMATSET LANGUAGE設定 default language 伺服器組態選項的設定而不同。 如需範例,請參閱<範例 C>。

ISDATE 運算式格式

如需 ISDATE 將傳回 1 之有效格式的範例,請參閱<datetime>和<smalldatetime>主題中的<支援 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)