我是在09年第一天1分钟内发现这个问题的...大家先看一下我的一句SQL语句:
dim datetime
datetime=date()
set rs=server.createobject("ADODB.Recordset")
sql="select top 5 * from [abc] where convert(varchar(10),[savetime],120)='"&datetime&"'"
rs.open sql,conn,1,2在sql server2000中,我们写sql语句比较日期和获取日期的时候,通常都是使用convert(varchar(10),[savetime],120)这句来着,意思是转义成varchar型后,截取前10位数.我程序写好的时候,是2008-12-25.那时候由于这列时间刚好10位没事,但是在2009-1-1的时候就出错了.大家可能发现了,时间没有补零.如果时间是2009-01-01的话.就不会发生错误了.我的数据库中的日期字段,我也是默认值用:convert(varchar(10),getdate(),120)来着,这样截取出来的时间也是2009-1-1这种短时间类型,而且没有补零(2009-01-01),可能服务器是这么设定时间的,服务器我没有权限修改他,那我们在数据库中,应该怎么设定,才能让截取到的时间为有补零状态的时间呢?我有想到个办法,就是Right(100+Month(getdate()),2)让月份自己补零.那还有其他办法可以解决吗?

解决方案 »

  1.   


    --SQL 2005
    -- 有什么不对呢?
    declare @x datetime
    set @x='2009-1-1'
    select convert(varchar(10),@x,120)
    /*
    --result:
    2009-01-01
    */
      

  2.   

    1楼的是 2005!~~~
    我用的2000
    select convert(varchar(10),getdate(),120)
    ---结果
    2009-01-04没有问题啊!~~~~~~~~
    你的数据库 的补丁 有没有 啊!~~~~~
      

  3.   

    wo shi le mei wen ti a 
      

  4.   

    select convert(varchar(10),getdate(),20) 
      

  5.   

     
    --declare @x datetime
    --set @x='2009-1-1'
    select convert(varchar(10),'2009-1-1',120)
    select convert(varchar(10),'2009-01-01',120)
    --result
    2009-01-01楼主,我用的sql2000啊,正常啊!
      

  6.   

    select top 5 * from [abc] where datediff(d,[savetime],@dt)=0
      

  7.   

    dim datetime
    datetime=date()
    set rs=server.createobject("ADODB.Recordset")
    sql="select top 5 * from [abc] where convert(varchar(10),[savetime],121)=convert(varchar(10),getdate(),121)"
    rs.open sql,conn,1,2