ISDATE
确定输入表达式是否为有效的日期。语法
ISDATE ( expression ) 参数
expression一个表达式,将要验证它是否为一个日期。expression 是任何返回 varchar 数据类型的表达式。 返回类型
int注释
如果输入表达式是有效的日期,那么 ISDATE 返回 1;否则,返回 0。下表显示一组示例所得到的返回值。查查  select * from k_exch where f_mio_date > '2009-01-01' and isdate(f_mio_date) = 0如果存在数据,则表示日期格式有错

解决方案 »

  1.   

    谢谢楼上的 刚刚的问题没有说清楚 原来数据类型是varchar(10) 可是里面存储的数据格式比较混乱 有'20080101'和'01 1  2009'
    我通过cast( as smalldatetime)函数根据条件建立一张视图,例如是"20080101"格式,就利用cast(left(f_miodate,8) as smalldatetime)
    而'01 1  2009'这个格式利用cast(f_miodate as smalldatetime)。
    将这个字段都转换为时间类型。转换后用isdate()判断视图记录和实际记录是一样的
    可是当对视图用刚刚的查询条件进行查询,就报错了。不知道什么原因。
      

  2.   

    select top 100 *
    from k_exch
    where case when isdate(f_mio_date)=1 then f_mio_date else '1900-1-1' end > '2009-01-01' 
      

  3.   

    select id,
    case when substring(f_mio_date,3,1)='' then convert(varchar(8),cast(f_mio_date as datetime),112) 
    else convert(varchar(8),f_mio_date) end as miodate
    from k_exch
    where miodate between '2009-01-01' and '2009-03-01' 
    order by sid为什么这条语句会说miodate列名无效呢?
      

  4.   

    自己解决 在case when 语句中不能用别名做判断,只能用case when substring(f_mio_date,3,1)='' then convert(varchar(8),cast(f_mio_date as datetime),112) else convert(varchar(8),f_mio_date) end 来判断