我需要检查一个值是否为日期,但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