SELECT  datediff('m',date(),cdate(left(byny,4) & "-" & right(byny,2) & "-" & "01")) 
FROM adddata 上面这个能差到,但是
加条件后就不行了,说“标准表达式中数据类型不匹配”
SELECT  datediff('m',date(),cdate(left(byny,4) & "-" & right(byny,2) & "-" & "01")) 
FROM adddata 
where datediff('m',date(),cdate(left(byny,4) & "-" & right(byny,2) & "-" & "01")) >1
我该怎么办啊。兄弟们。

解决方案 »

  1.   

    dim tmpDate as string
    dim strsql  as string
    tmpDate=cdate(left(byny,4) & "-" & right(byny,2) & "-" & "01")strsql=" SELECT  datediff('m',date(),cdate(left(byny,4) & "-" & right(byny,2) & "-" & "01")) 
    FROM adddata 
    where datediff('m',date(),"& tmpDate &") >1"
     
      

  2.   

    byny是一个字符串类型的字段,比如200910表示2009年十月份,我现在要把这个非标准的字段和系统时间对比月差。
      

  3.   

    SELECT  datediff('m',date(),"'" & cdate(left(byny,4) & "'-'" & right(byny,2) & "'-" & "01")) 
    FROM adddata 
    where (datediff('m',date(),"'" & cdate(left(byny,4) & "'-'" & right(byny,2) & "'-" & "01")) >1) 
    试一下上面。
      

  4.   

    basey兄弟,我试过了,还是说“标准表达式中数据类型不匹配”
      

  5.   

    SELECT  datediff('m',date(),cdate(left(byny,4) & "-" & right(byny,2) & "-" & "01")) 
    FROM adddata 
    where datediff('m',date(),"#" & left(byny,4) & "-" & right(byny,2) & "-" & "01#") >1 上面的试试.
      

  6.   

    liuxu2559 兄弟,我试过了,还是一样。555
      

  7.   

    这样试试:
    SELECT  datediff('m',date(),cdate(left(byny,4) & "-" & right(byny,2) & "-" & "01")) 
    FROM adddata 
    where datediff('m',date(),cdate(left(byny,4) & "-" & right(byny,2) & "-01")) >1 
      

  8.   

    把你前面能查的 SQL 作为一个子查询,然后用一个主查询过滤掉 0 记录。
      

  9.   

    Leftie 兄弟的语句也试过了,还是一个样,
    of123兄弟,子查询也试过了。datediff('m',date(),cdate(left(byny,4) & "-" & right(byny,2) & "-01")) as mm 然后where mm>1 也报同样的错误。
      

  10.   

    basey兄弟,datediff这个函数返回值就是long类型的,>1的运算应该没问题啊,
    我也觉得是类型不同作大小运算不行,但是在access自带的查询里怎么转换啊,不是在程序里啊。
      

  11.   

    "Select datediff('d',CommitTime,#" & Format(Now(), "yyyy-MM-dd") & "#) as mm from db_Affiche where datediff('d',CommitTime,#" & Format(Now(), "yyyy-MM-dd") & "#)>=1"
    上面的我试过了,可以的。(CommitTime是我在数据库中的日期型字段)
      

  12.   


    liuxu2559兄弟,谢谢你的测试,
    我和你的区别是byny字段是字符串,而且是6位数,比如200912,我必须加上代表日的两位数,然后再转换成时间字段进行比较。
    现在的问题是,我用format转换byny字段时,用SELECT  datediff('m',date(),cdate(left(byny,4) & "-" & right(byny,2) & "-" & "01")) 
    FROM adddata 查询,语法没有错,结果是查询的记录中都是“错误”。而用cdate转时,查询就是对的,能正确计算出月差。
    对比您的数据,我感觉唯一的不同是,我没有在where条件中日期型加“#”,下面加了,测试一下还是出错,
    SELECT datediff('m',"#"&format(now(),'yyyy-mm-dd')&"#","#"&cdate(left(byny,4) & "-" & right(byny,2) & "-" & "01"))&"#"
    FROM adddata where datediff('m',"#"&format(now(),'yyyy-mm-dd')&"#","#"&cdate(left(byny,4) & "-" & right(byny,2) & "-" & "01"))&"#";
    我怀疑是cdate问题?但是我不加条件单单查询时没有问题啊?
    谢谢。。
      

  13.   

    先不加where条件,看看结果是什么?再看看>1这个条件成不成立。
      

  14.   

    byny这里面有没有非法数据?也就是说转不过来的数据?
      

  15.   


    只要字符串没有非法日期,试试:select datediff('m',cdate(format(byny,'####-##')),date())
    from [adddata]
    where datediff('m',cdate(format(byny,'####-##')),date())>1
      

  16.   


    楼主的语句没有问题,可能是 byny 列有空值楼主用下面的语句试试看
    SELECT  datediff('m',date(),cdate(left(iif(isnull(byny),'200910',byny),4) & "-" & right(iif(isnull(byny),'200910',byny),2) & "-" & "01")) 
    FROM adddata 
    where datediff('m',date(),cdate(left(iif(isnull(byny),'200910',byny),4) & "-" & right(iif(isnull(byny),'200910',byny),2) & "-" & "01")) >1 
      

  17.   

    补充一下,也可能是 byny 列不符合规范的数据,比如200906 数据库里是20096 就会有问题仔细检查一下,要是数据太多,就先全部删掉只留一行测试
      

  18.   

    用simon__sun 的语句成功啦。感激