如果在字符串末尾添加空格,则Suse Where Clause不起作用

时间:2016-06-16 07:49:35

标签: sql sql-server

我有下面的SQL查询

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

它给我的结果是错误的,结果必须在我最后没有添加空间时,因为在数据库中没有空间。

是否有任何功能或我该怎么做。

6 个答案:

答案 0 :(得分:1)

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

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

编辑:为了匹配包含尾随空格,你可以使用DATALENGTH函数,就像这样;

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

答案 1 :(得分:0)

如果您不想要结果,如果末尾有空格,您可以使用以下查询

select * from usertable where username not like '% '

答案 2 :(得分:0)

或者这个:

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

答案 3 :(得分:0)

我希望您希望过滤那些在最后位置有空格的记录。

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 '设置为参数值,则上面的块返回结果。

答案 4 :(得分:0)

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

  

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

(我的重点)

答案 5 :(得分:0)

嗨,这段代码对我有用........

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