ISDATE (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

如果 expression 為有效的 datetime 值,則傳回 1;否則傳回 0。

ISDATE 會在 expressiondatetime2 值時傳回 0。

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

Transact-SQL 語法慣例

Syntax

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
textntextimage 資料類型的值。 0
秒數有效位數超過 3 的任何值 (.0000 到 .0000000...n)。 若 expressiondatetime2 值,則 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 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)