让人意外的 IsDate 和 CDate

作者:chilleen 来源:ITPOW(原创) 日期:2006-4-6

从客户端获取的日期类型字符串,我们一般要先判断是否是日期类型,然后再进入 SQL 语句。

起初,我是这样判断的:
if not IsDate(dt) then
    'dt 不是日期类型,终止执行
end if

但在 SQL 语句执行时,仍然出现了 dt 不是 datetime 类型的错误。

原来 IsDate 的参数是日期表达式或字符串表达式,而这个日期表达式是这样的:任何可以被解释为日期的表达式,包括任何日期文字、看起来象日期的数字及字符串和由函数返回的日期的组合。

也就是说 IsDate 太聪明了,像“2005-1-拾”、“2005-1-一”、“2005-1-1”这样的表达式,它都认为是正确的日期表达式,它会返回 true,但 SQL 里面则不这么宽松了。

所以我们的判断要改一下:
if IsDate(dt) then
    dt = CDate(dt)
else
    'dt 不是日期类型,终止执行
end if

作一下强制转换,“2005-1-拾”就会被转换成“2005-1-10”之类的形式,就会被 SQL 所认识了。

但是“2005-1-壹拾”竟被 CDate 转换成“2005-1-11”,“2005-1-贰拾伍”被转换成“2005-1-26”就值得注意了,“2005-1-拾”或“2005-1-贰伍”能够被正常转换。

相关文章