实在头疼,上来求助,求解。
目前用一成熟软件查询我的数据库(SQL Server2000中文版),用SQL事件探查器分析有一条查询语句条件类似于这样where (T.DateAndTime IN ('08-02-10 10:54:22')),数据库中明明有这个日期的数据,但是返回结果为0,若改成(T.DateAndTime IN ('2010-08-02 10:54:22')),则能正确返回。问题的关键是无论我如何修改电脑时间格式,哪怕数据库中显示的就是'08-02-10 10:54:22',返回结果仍为0,查询软件我不能修改,请问有什么办法能解决该问题?多谢

解决方案 »

  1.   

    T.DateAndTime in (convert(datetime,'2010-08-02 10:54:22',120))
      

  2.   

    DateAndTime如果是datetime类型,应该没问题的,如果是字符类型,肯定不行。
      

  3.   

    请注意,我不能修改软件,只能用它的查询语句,即where (T.DateAndTime IN ('08-02-10 10:54:22')),能否修改sql server的默认日期格式为mm-dd-yy?
      

  4.   

    你强制转换日期格式为你需要的日期格式即可.convert(varchar(19),T.DateAndTime,120) IN ('2010-08-02 10:54:22')
    convert(varchar(19),T.DateAndTime,120) = ('2010-08-02 10:54:22')
      

  5.   

    查询分析器执行一下,看看返回什么结果:declare @t datetime
    set @t = '08-02-10 10:54:22'
    select @t
      

  6.   

    查询分析器执行一下,看看返回什么结果:declare @t datetime
    set @t = '08-02-10 10:54:22'
    select @t
      

  7.   

    请注意,我不能修改软件,只能用它的查询语句,即where (T.DateAndTime IN ('08-02-10 10:54:22'))!!
      

  8.   

    要解决问题无非就是两点:(任选一个)
    1,改sql 查询语句
    2,改DB数据LZ选择哪个简单就操作哪个吧
      

  9.   


    1改数据库中的数据
    2改程序中的SQL
    3...是不可能的。
      

  10.   

    convert(varchar(19),T.DateAndTime,120) IN ('2010-08-02 10:54:22')
    convert(varchar(19),T.DateAndTime,120) = ('2010-08-02 10:54:22')
      

  11.   

    datetime类型后面有毫秒 不可能完全相等所以你需要转化一下
      

  12.   

    declare @s datetime
    set @s='08-02-10 10:54:22'select @s  2008-02-10 10:54:22.000  ---返回的是 年月日顺序(1 行受影响)
    你实际的时间是这个 '2010-08-02 10:54:22'
      

  13.   

    declare @s datetime
    set @s='08-02-99 10:54:22'  -- 试想,你改下年份为99年,你再执行下,select @s  --就报错了 ,说明根本不是时间格式
     
    消息 242,级别 16,状态 3,第 2 行
    从 char 数据类型到 datetime 数据类型的转换导致 datetime 值越界。
      

  14.   

    谢谢大家的回复
    我觉得奇怪的是,数据库中保存的是datetime类型,可以随着电脑时间格式的改变而改变,比如电脑时间设为yyyy-MM-DD,显示的就是yyyy-MM-DD,若设成MM-DD-yyyy,则数据库中数据和查询条件中的日期是完全一样的。但是还是查不出来结果;若把查询条件中的日期改成yyyy-MM-DD,则会查出来结果,这是什么个情况?
    会不会跟系统或者SQLserver的版本有关?数据是在英文版的环境下生成的,但是目前数据库服务器和软件都是中文版的
      

  15.   


    SET DATEFORMAT mdy  --通过这个设置下declare @s datetime
    set @s='08-02-99 10:54:22' select @s-----------------------
    1999-08-02 10:54:22.000(1 行受影响)
      

  16.   

    如果说MM-DD-yy这样的时间格式不对,但是该软件之前运行良好,只不过是换了一个数据库服务器,连数据都一样。
      

  17.   

    上面说错了一个地方,我要是把电脑时间改成MM-DD-yy,则数据库中的时间显示和查询条件一致了,但是返回结果还为0
    这个和set dateformat mdy 效果是不是一样的?
      

  18.   

    数据库的存储的格式跟客户端日期格式没关系。
    如果你使用的是Excel这些,通过设定客户端格式确实有影响。
      

  19.   

    看看语言设置对不对吧:exec sp_helplanguage @@language
      

  20.   


    30 ymd 7 0 简体中文 Simplified Chinese 01,02,03,04,05,06,07,08,09,10,11,12 01,02,03,04,05,06,07,08,09,10,11,12 星期一,星期二,星期三,星期四,星期五,星期六,星期日 2052 2052
      

  21.   


    Select Convert(Datetime,Replace('08-02-10 10:54:22','-',' '),100)
    -----------------------
    2010-08-02 10:54:22.000(1 行受影响)
      

  22.   

    日期比较怎么用in呢!
    datediff可以胜任
      

  23.   

    SET DATEFORMAT mdy --通过这个设置下意思是说,执行完这个之后,执行where (T.DateAndTime IN ('08-02-10 10:54:22'))就OK了?试一下
      

  24.   

    试过了,SET DATEFORMAT mdy之后,直接执行语句ok了
    但是用软件还是不行
    我想是不是有个地方保存了这个dateformat,能否永久修改成为mdy?那样就能用了
      

  25.   

    MS建议,使用不依赖于dateformat的日期格式,显然软件没有接受这个建议。
      

  26.   

    哈哈,谢谢大家
    软件我是不能改的,因为不是我开发的,并且也找不到开发人员
    问题解决了,我修改了master库下的syslanguages中的简体中文的dateformat,之前是ymd,改成了mdy,然后把电脑的时间格式改成了MM-DD-yy,重启服务器,就OK了
    结贴,再次表示感谢。