我需要檢查一個值是否爲日期,但ISDATE()
函數由於偏移量而遇到像2012-07-21 00:00:00+02:00
這樣的值時返回0。我的問題是我不能簡單地施放這個值,實際上ISDATE()
是用來在查詢中檢查這個值是否是鑄造前的日期(參見下面的例子)。ISDATE()帶偏移量的日期時間字符串
SELECT p.propertyid
FROM property p
WHERE CASE Isdate(p.[value])
WHEN 1 THEN
CASE
WHEN Cast(p.[value] AS DATETIME) >= Cast('7/1/2012' AS DATETIME)
THEN 1
ELSE 0
END
ELSE 0
END = 1
所以我想知道如何檢查,如果本例中的p.[value]
是一個日期。
無論如何,您無法依賴此檢查進行投射工作,但無法保證檢查將首先發生。這裏有很多示例應該作爲依賴這種邏輯的警告:http://dba.stackexchange.com/questions/12941/does-sql-server-read-all-of-a-coalesce- function-even-if-the-first-argument-is-no – 2012-07-09 13:22:31
爲什麼需要對名爲'enddate'的列進行ISDATE測試?是否有實際的非日期值?我不問他們爲什麼會在那裏(儘管我可能,也許應該),但我會很想知道他們的樣子。 – 2012-07-09 15:14:54
對不起在示例中犯了一個錯誤,實際的列名稱是「值」,它並不總是包含日期,編輯示例來解決此問題。 – Rutger 2012-07-10 06:51:00