tb1 中有三个字段ID,DT1,DT2 全部为varchar类型。
其中DT1 ,DT2 为时间格式,但在表中都是 varchar 类型。。我根据tb1 创建视图  
SQL codecreate view tv1
SELECT     ID, CAST(DT1  AS datetime)  AS DT1, CAST(DT2 AS datetime) AS DT2
FROM        dbo.tb1 我在程序中直接用
SQL codeselect count(1) from tv1 where DT1>='2011-07-01 00:00:00'  and  DT2 <='2011-08-26 23:59:59'
结果报错 为 "从字符串转换日期和/或时间时,转换失败。"但我把该 SQL 语句直接放在SQL中执行,该语句不报错,能正确执行。。开发环境为 :vs2008 + sql 2008

解决方案 »

  1.   

    既然是字符类型,直接串字符串不行吗,干嘛还as datatime
      

  2.   

    sql再执行这条语句得时候where DT1>='2011-07-01 00:00:00' 会将字符串转换成时间类型,然后两个时间类型进行比较,但是在转换过程中出错了,所以最简单得方法就是2l说的那样,直接以字符串形式进行比较,没有必要转换成Date类型。tb1 中有三个字段ID,DT1,DT2 全部为varchar类型。
    其中DT1 ,DT2 为时间格式,但在表中都是 varchar 类型。。我根据tb1 创建视图   
    SQL codeSQL codecreate view tv1
    SELECT     ID, DT1, DT2
    FROM        dbo.tb1 
      

  3.   

    SQL codeselect count(1) from tv1 where cast(DT1 as datetime)>='2011-07-01 00:00:00' and cast(DT2 as datetime) <='2011-08-26 23:59:59'
      

  4.   

    select count(1) from tv1 where DT1>=convert(datetime,'2011-07-01 00:00:00',120) and DT2 <=convert(datetime,'2011-08-26 23:59:59',120)
      

  5.   

    用字符串比较。另请日期的用datatime 否则很多地方都要处理。
      

  6.   


     这个好像也不行?
    是不是在创建 试图 CAST(DT1  AS datetime)  AS DT1 这出了问题 ??
      

  7.   

    表中  DT1  和 DT2 中数据 是导入 进去的。。中间有两种格式06/14/2011 19:17:09 和 Jun  3 2011  6:34PM  那怎么转换后来按 时间查询!!!
      

  8.   

    create view tv1
    as
    SELECT * from 表名
    go 
      

  9.   

    时间字段在数据库就用DataTime类型,传值过去的时候用string就行了
      

  10.   

    哦 原来是时间问题呀
    ----------------
    create view tv1
    as
    SELECT convert(ID1,'2011-01-21'),convert(ID2,'2011-01-21') from 表名
    go  
      

  11.   

    convert(ID1,'2011-01-21')时间你自己设置LZ