解决方案 »

  1.   

    你用isdate()函数检查一下是否有非日期格式的数据,了比如2月30号这样的数据
      

  2.   


    嗯,表内确实找到了一些非日期格式的数据;可是我在测试的时候用order by 加top 1 固定在了一条记录上,该行的字段值为NULL,这样也会有影响吗?
    而且我刚才试验了一下,如果在where条件内指定了查询该行,就不会报错了。
      

  3.   

    因为你的数据中,有不能转化为DATETIME的数据而TOP 1的查询刚好不包含此类数据,所以TOP 1 的时候可以你可以新加一列时间列,用UPDATE TB SET ...  WHERE ISDATE(时间列)=1把能转换的先转换了然后,再看看,不能转的,是要统一转成什么,或看情况手动更新
      

  4.   


    还有另外一个字段类型是char(8),记录的内容为员工的生日,里面的值都是日期格式和NULL。
    也同样出现了这个问题
      

  5.   

    drop table test 
    create table test (d varchar(30))
    insert into test values('2015-02-31')
    insert into test values('2015-02-28')select * from test
    select cast(d as datetime)  from test where isdate(d)=1/*
    d
    ------------------------------
    2015-02-31
    2015-02-28(2 row(s) affected)
    -----------------------
    2015-02-28 00:00:00.000
    */
      

  6.   


    查出一个问题,是因为datetime的范围只到1753年,而数据内有小于1753年的数据,所以会造成超出范围的错误。
    另一个原因是该字段有脏数据,非日期格式的值。非常感谢两位的帮助!