none
T-SQL 查询条件中包换时间类型转换判断 提示"从字符串向 datetime 转换时失败" RRS feed

  • 问题

  • <pre lang="x-sql">
    WITH ocTable AS(SELECT  CAST(OccurTime AS DateTime ) AS ocTime FROM ClientLog WHERE ISDATE(OccurTime)=1)
    SELECT * FROM ocTable  
    --带上查询条件就出错
    WHERE ocTime Between '2010-12-12 15:38:06' AND '2010-12-12 15:38:06'
    
    



    据说从2000 sp4 开始 WHERE  带有 字符串转成时间 以时间作为查询条件的都出 "从字符串向 datetime 转换时失败"
     

    这样写就没有问题

    WITH ocTable AS(SELECT CASE ISDATE(OccurTime) WHEN 1 THEN CAST(OccurTime AS DateTime ) ELSE NULL END AS ocTime FROM ClientLog )
    SELECT * FROM ocTable 
    WHERE ocTime Between CAST('2010-12-12 15:38:06' AS DATETIME) AND CAST('2010-12-12 15:38:06' AS DATETIME)


    SQL 数据库的BUG 还是怎么回事  
    CAST  CONVERT  函数转换失败以后应该 返回NULL  而不是抛出异常

    • 已编辑 Redforce 2011年11月4日 7:50
    2011年11月4日 7:25

答案

  • CAST  CONVERT  函数转换失败以后应该 返回NULL  而不是抛出异常

    谁告诉你转换失败不抛出异常的?失败当然就是失败了。
    想不想时已是想,不如不想都不想。
    2011年11月4日 10:10
    版主

全部回复