select count(czp.xx) as line,count(distinct czp.czpid) as xc from czp,czplb where convert(datetime,'2006-'+convert(char(2),czplb.js_mon)+'-'+convert(char(2),czplb.js_day)+' '+convert(char(2),czplb.js_hour)+':'+convert(char(2),czplb.js_min))>=convert(datetime,'"+year1+"'+'"+yue1+"'+'-'+'"+ri1+"'+' '+'"+shi1+"'+':'+'"+fen1+"')
这个是一条我正常用的SQL语句,其中的2006是我固定写的,也就是2006年都好用,现在已经2007年了,所以那里就应该换成数据库中的czpid中的前四位,我这样改的:
select count(czp.xx) as line,count(distinct czp.czpid) as xc from czp,czplb where convert(datetime,convert(char(4),right(czplb.czpid,4))+'-'+convert(char(2),czplb.zx_mon)+'-'+convert(char(2),czplb.zx_day)+' '+convert(char(2),czplb.zx_hour)+':'+convert(char(2),czplb.zx_min))>=convert(datetime,'"+year1+"'+'"+yue1+"'+'-'+'"+ri1+"'+' '+'"+shi1+"'+':'+'"+fen1+"') 
这样改过之有一运行就报错:datetime 错误!
请帮忙!!!!!!!!!!!!!
****重点是就取出数据库中一列数据的前四位,完成datetime函数*****
等中!~!~!~!~!~!~!~!~!~!~!~!~!~!~

解决方案 »

  1.   

    --tryselect 
    count(czp.xx) as line,
    count(distinct czp.czpid) as xc 
    from czp,czplb 
    where convert(datetime,right(czplb.czpid,4)+'-'+convert(char(2),czplb.zx_mon)+'-'+convert(char(2),czplb.zx_day)+' '+convert(char(2),czplb.zx_hour)+':'+convert(char(2),czplb.zx_min))>=convert(datetime,'"+year1+"'+'"+yue1+"'+'-'+'"+ri1+"'+' '+'"+shi1+"'+':'+'"+fen1+"') 
      

  2.   

    select count(czp.xx) as line,count(distinct czp.czpid) as xc from czp,czplb where convert(datetime,convert(char(4),right(czplb.czpid,4))+'-'+convert(char(2),czplb.zx_mon)+'-'+convert(char(2),czplb.zx_day)+' '+convert(char(2),czplb.zx_hour)+':'+convert(char(2),czplb.zx_min))>=convert(datetime,'"+year1+"'+'-'+'"+yue1+"'+'-'+'"+ri1+"'+' '+'"+shi1+"'+':'+'"+fen1+"') 
    看可不可以呢???
      

  3.   

    select count(czp.xx) as line,count(distinct czp.czpid) as xc from czp,czplb 
    where cast(right(czplb.czpid,4)+ '-'+cast(czplb.js_mon as varchar)+'-'+cast(czplb.js_day as varchar)+' '+cast(czplb.js_hour as varchar)+':'+cast(czplb.js_min as varchar) as datetime)>=convert(datetime,'"+year1+"'+'"+yue1+"'+'-'+'"+ri1+"'+' '+'"+shi1+"'+':'+'"+fen1+"')
      

  4.   

    先试试如下语句是否有问题:
    select convert(datetime,right(czplb.czpid,4)+'-'+convert(char(2),czplb.zx_mon)+'-'+convert(char(2),czplb.zx_day)+' '+convert(char(2),czplb.zx_hour)+':'+convert(char(2),czplb.zx_min))
    from czplb
      

  5.   

    convert(datetime,'"+year1+"'+'"+yue1+"'+'-'+'"+ri1+"'+' '+'"+shi1+"'+':'+'"+fen1+"')
    这里的year1....是什么东西?
      

  6.   

    year1等东西就是一些数据
    各位,我在测试下你们的语句
      

  7.   

    wangtiecheng(不知不为过,不学就是错!) 
    从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
      

  8.   

    可能是你的right(czplb.czpid,4)有问题,你把这个串作为年份
    select right(czplb.czpid,4) from czplb
    检查是否有非法的年份
      

  9.   

    楼上的,应该不会吧,错误是:从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
      

  10.   

    --把convert(datetime,)去掉,看看你的字符串是否合法select right(czplb.czpid,4)+'-'+convert(char(2),czplb.zx_mon)+'-'+convert(char(2),czplb.zx_day)+' '+convert(char(2),czplb.zx_hour)+':'+convert(char(2),czplb.zx_min)
    from czplb
    --如果这个串是合法的数据,那么加上转换也不应该报错
      

  11.   

    select right(czplb.czpid,4)+'-'+convert(char(2),czplb.zx_mon)+'-'+convert(char(2),czplb.zx_day)+' '+convert(char(2),czplb.zx_hour)+':'+convert(char(2),czplb.zx_min)
    from czplb
    --如果这个串是合法的数据,那么加上转换也不应该报错
    这样就好用
    加上convert(datetime,) 就报这个错误:
    从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
      

  12.   

    问题就在这儿,你检查一下select right(czplb.czpid,4)+'-'+convert(char(2),czplb.zx_mon)+'-'+convert(char(2),czplb.zx_day)+' '+convert(char(2),czplb.zx_hour)+':'+convert(char(2),czplb.zx_min)
    from czplb
    这里的数据有的数据不能转换为日期型
      

  13.   

    什么叫做不能转化为日期型呢????????????
    我开始的语句可以运行,就是年的位置不一样
    select count(czp.xx) as line,count(distinct czp.czpid) as xc from czp,czplb where convert(datetime,'2006-'+convert(char(2),czplb.js_mon)+'-'+convert(char(2),czplb.js_day)+' '+convert(char(2),czplb.js_hour)+':'+convert(char(2),czplb.js_min))>=convert(datetime,'"+year1+"'+'"+yue1+"'+'-'+'"+ri1+"'+' '+'"+shi1+"'+':'+'"+fen1+"')
      

  14.   

    select convert(datetime,left(czplb.czpid,4)+'-'+'10-'+'10'+' '+convert(char(2),czplb.zx_hour)+':'+convert(char(2),czplb.zx_min))
    from czplb
    这样就能运行,那样的话,错误就是zx_mon,zx_day,即
    convert(char(2),czplb.zx_mon)+'-'+convert(char(2),czplb.zx_day)
    其中zx_mon中是月,有1,2,3,4,5,6,7,8,9,10,11,12
    是不是有时候是一位(如1),有时候是2位(如10),就有错误
      

  15.   

    谢谢wangtiecheng(不知不为过,不学就是错!) 
    我发现了,我的数据里确实有一条数据的月是0,但是就一条(一共几千条数据,我一条一条看的),那该怎么办呀?
      

  16.   

    --查出所有zx_mon为0 的数据select czplb.zx_mon
    from czplb
    where zx_mon=0
      

  17.   

    朋友,现在有个问题这条语句可以执行:
    select count(czp.xx) as line,count(distinct czp.czpid) as xc from czp,czplb where convert(datetime,left(czplb.czpid,4)+'-'+convert(char(2),czplb.zx_mon)+'-'+convert(char(2),czplb.zx_day)+' '+convert(char(2),czplb.zx_hour)+':'+convert(char(2),czplb.zx_min))>=convert(datetime,'2007-'+'02-'+'11'+' '+'11'+':'+'11')
    然后我用到JSP程序里是这样的:
    select count(czp.xx) as line,count(distinct czp.czpid) as xc from czp,czplb where convert(datetime,left(czplb.czpid,4)+'-'+convert(char(2),czplb.zx_mon)+'-'+convert(char(2),czplb.zx_day)+' '+convert(char(2),czplb.zx_hour)+':'+convert(char(2),czplb.zx_min))>=convert(datetime,'"+year1+"'+'-'+'"+yue1+"'+'-'+'"+ri1+"'+' '+'"+shi1+"'+':'+'"+fen1+"')
    其中year1,yue1,ri1,shi1,fen1,就是上个页面传过来的参数,年,月日,时分
    请帮我看看怎么回事