user_no是字符型?select * from users where ltrim(rtrim(user_no))='1'

解决方案 »

  1.   

    确定select * from users where number in('134124','124512') 的结果是:
    user_no  number 
    1        '134124' 
    2        '124512' ?
      

  2.   

    --TRY
    select * from users where replace(replace(replace(user_no,' ',''),char(10),''),char(13),'')=1
      

  3.   

    select * from users where user_no = 1 select * from users where cast(user_no as int) = 1 select * from users where cast(user_no as varchar) = '1' 
      

  4.   

    速度很快啊,谢谢,函数replace(),我用了,没有用,
    字段类型是varchar(30)
      

  5.   

    select * from users where user_no = '1'如果前面有空格.select * from users where replace(user_no,' ','') = '1'如果有中文(全角)的空格,用
    select * from users where replace(replace(replace(user_no,' ',''),char(10),''),char(13),'')='1'
      

  6.   

    这样应该可以了吧?select * from users where cast(user_no as int) = 1 select * from users where cast(user_no as varchar) = '1' 
      

  7.   


    如果user_no是varcharselect user_no , len(user_no) from users 看看长度是不是1?这样应该明白了吧?
      

  8.   

    判读一下user_no 是否2边有空格
      

  9.   

    select * from users where ltrim(rtrim(user_no))='1'应该是前后有空格问题吧
      

  10.   

    仔细看了下大家的意思,基本上锁定是字符问题,
    我也尝试了各位给出的语句,基本上,还是查询不到,。。
    万般无奈,只好决定drop 它啦,
      

  11.   


    select * from users where cast( ltrim(rtrim(user_no)) as int  )=1
      

  12.   

    select * from users where user_no  LIKE '%1'
      

  13.   


    用like '%%'是可以的,关键是系统中都是用user_no来关联查询的,影响很大
    不可能都修改为like,而且效率是问题
      

  14.   

    不太明白楼主的意思.不过你可以在"1" 前面后都加"like"或者"__",来判断前后是不是有空格
      

  15.   

    用dbcc checktable 检查表的完整性
      

  16.   

    用dbcc checktable 检查表的完整性
      

  17.   

    有可能是unicode编码的问题select * from users where user_no = 1 select * from users where cast(user_no as int) = 1 select * from users where cast(user_no as varchar) = N'1' 
      

  18.   

    在字符串前面加个 N
    select * from users where cast(user_no as varchar) = N'1' 
    如果还不行的话
    就用 
    dbcc checktable 
      

  19.   

    鼠标点击数据库里面的1,看看焦点是不是落在紧靠1的右边,如果不是里面肯定有空格,把空格去掉好了。select * from users where ltrim(rtrim(user_no))='1'
      

  20.   

    厉害啊~一眼看出问题本质!我咋没想到呢!非常感谢各位积极热心的回答!
    ======================================================================================
    【特别感谢:happyflystone 】贴出测试的结果:
    ======================================================================================
    服务器: 消息 8951,级别 16,状态 1,行 1
    表错误: 表 'users'(ID 1067866871)。索引 'IX_users_no'(ID 105)中下列行的键缺少或无效:
    服务器: 消息 8955,级别 16,状态 1,行 1
    数据行(1:10489617:0)(由 RID = (1:10489617:0)  标识)的索引值为 user_no = 2001405931。
    服务器: 消息 8951,级别 16,状态 1,行 1
    表错误: 表 'users'(ID 1067866871)。索引 'IX_users_no'(ID 105)中下列行的键缺少或无效:
    服务器: 消息 8955,级别 16,状态 1,行 1
    数据行(1:10489617:1)(由 RID = (1:10489617:1)  标识)的索引值为 user_no = 2001331578。
    服务器: 消息 8951,级别 16,状态 1,行 1
    表错误: 表 'users'(ID 1067866871)。索引 'IX_users_no'(ID 105)中下列行的键缺少或无效:
    服务器: 消息 8955,级别 16,状态 1,行 1
    数据行(1:10489617:3)(由 RID = (1:10489617:3)  标识)的索引值为 user_no = 2001406464。
    'users' 的 DBCC 结果。
    对象 'users' 有 2071047 行,这些行位于 252729 页中。
    CHECKTABLE 发现了 0 个分配错误和 3 个一致性错误(在表 'users' 中,该表的对象 ID 为 1067866871)。
    repair_fast 是最低的修复级别(对于由 DBCC CHECKTABLE (ppc.dbo.users ) 发现的错误而言)。
      

  21.   

    问题找出来了,我想下一步就是修复该表。
    但是,造成这个错误的原因是什么?原来服务器的硬盘是出过问题的,好像客户他们自己修理过的吧,
    但是我用HDTunePro检测没发现有问题,我想用硬盘故障跟客户解释,可又拿不出有力的证据,还总以为我老那硬盘说事,咋儿办?再一个问题,如果真是硬盘的问题,那我这么频繁的修复表也不是个事啊
      

  22.   

    select * from users where ltrim(rtrim(user_no)) = '1'
    或者用程序读取出数据库字段,然后判断该字段是否有隐藏的控制字符?比如回车换行之类的。
      

  23.   

    DBCC SHOWCONTIG('user')dbcc dbreindex('database_name.dbo.user','',90) 索引重建试试
      

  24.   

    测试select user_no,len(user_no) from users 可知是否字符后有空格