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 資料庫 (初始版本,透過目前版本)。 |
語法
ISDATE ( expression )
引數
- expression
這是字元字串或可以轉換為字元字串的運算式。 此運算式的長度必須少於 4,000 個字元。 日期和時間資料類型 (但不包括 datetime 和 smalldatetime) 不允許做為 ISDATE 的引數。
傳回類型
int
備註
只有在搭配 CONVERT 函數使用、已指定 CONVERT 樣式參數,而且樣式不等於 0、100、9 或 109 時,ISDATE 才具有決定性。
ISDATE 的傳回值會根據 SET DATEFORMAT、SET 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;