我有下面的SQL查询
Select * from usertable where username = 'xyz (space)';
它给我的结果是错误的,结果必须在我最后没有添加空间时,因为在数据库中没有空间。
是否有任何功能或我该怎么做。
答案 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) ')