【问题标题】:Sql Where Clause not working if add space at the end of string如果在字符串末尾添加空格,则 Sql Where 子句不起作用
【发布时间】:2016-06-16 07:49:34
【问题描述】:

我有下面的 sql 查询

Select * from usertable where username = 'xyz (space)';

它给我的结果是错误的,只有当我没有在最后添加空间时才会出现结果,因为在数据库中没有空间。

有什么功能或者我该怎么做。

【问题讨论】:

  • 你从 php 运行查询
  • 不,它在 sql server 2008 中
  • @Sharmaji 使用修剪
  • 请给我示例查询,如果末尾有空格,我不想要结果。

标签: sql sql-server


【解决方案1】:

如果数据是带有尾随空格的 CHAR 数据,您可以像这样使用 RTRIM 函数;

select * from usertable where RTRIM(username) = 'xyz'

编辑:为了匹配包括尾随空格,您可以使用 DATALENGTH 函数,如下所示;

select * from usertable where username = 'xyz ' AND
                              DATALENGTH(username) = DATALENGTH('xyz ')

【讨论】:

  • 数据是 varchar,rtrim 会从数据库中删除空间,但我想要的是如果最后有空间,那么结果就不会出现。
  • ..感谢它的工作,但更改查询如下:select * from usertable where username = 'xyz' AND DATALENGTH(username) = DATALENGTH('xyz')
【解决方案2】:

如果你不想要结果,如果最后有空格,你可以使用下面的查询

select * from usertable where username not like '% '

【讨论】:

    【解决方案3】:

    或者这个:

        select * from usertable where right(username,1) <> ' '
    

    【讨论】:

      【解决方案4】:

      我希望你想过滤那些在最后一个位置有空格的记录。

      DECLARE @TestTable TABLE (Data VARCHAR(20));
      INSERT INTO @TestTable (Data) VALUES ('xyz'), ('Sharma ');
      
      SELECT * FROM @TestTable WHERE Data = 'Sharma ';
      SELECT * FROM @TestTable WHERE Data = 'Sharma';
      

      WHERE Data = 'Sharma ' and 'Sharma' 会得到相同的结果

      使用SUBSTRING(Data, DATALENGTH(Data), 1) 可以获取列的最后一个字符并在 WHERE 子句中添加条件将解决您的问题:

      DECLARE @TestingValue AS VARCHAR(20) = 'Sharma'; -- 'xyz' -- 'Sharma '
      
      SELECT * FROM @TestTable WHERE Data = @TestingValue AND SUBSTRING(@TestingValue, DATALENGTH(@TestingValue), 1) = ' ' ;
      

      如果您将'Sharma '设置为参数值,则上述块返回结果。

      【讨论】:

      • 实际上,如果用户输入空间,我不想要结果
      【解决方案5】:

      这是因为SQL Server follows ANSI 92 rules规定:

      SQL Server 遵循关于如何比较字符串和空格的 ANSI/ISO SQL-92 规范(第 8.2 节,,一般规则 #3)。 ANSI 标准要求对比较中使用的字符串进行填充,以便在比较之前它们的长度匹配。填充直接影响 WHERE 和 HAVING 子句谓词的语义以及其他 Transact-SQL 字符串比较。例如,对于大多数比较操作,Transact-SQL 认为字符串 'abc' 和 'abc' 是等效的。

      (我的重点)

      【讨论】:

        【解决方案6】:

        您好,这段代码对我有用........

        select * from usertable where username = 'xyz (Space) ' AND
                                      DATALENGTH(username) = DATALENGTH('xyz (Space) ')
        

        【讨论】:

          猜你喜欢
          • 2022-06-20
          • 1970-01-01
          • 1970-01-01
          • 2022-08-18
          • 1970-01-01
          • 2012-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多