如果在字符串末尾添加空格,则Sql Where子句不起作用

如果在字符串末尾添加空格,则Sql Where子句不起作用,sql,sql-server,Sql,Sql Server,我有下面的sql查询 Select * from usertable where username = 'xyz (space)'; 这是给我的结果,这是错误的结果只有当我没有添加空间结束,因为在数据库中没有空间 是否有任何函数或如何执行该操作。如果数据是带有尾随空格的CHAR数据,则可以像这样使用该函数 select * from usertable where RTRIM(username) = 'xyz' select * from usertable where username =

我有下面的sql查询

Select * from usertable where username = 'xyz (space)';
这是给我的结果,这是错误的结果只有当我没有添加空间结束,因为在数据库中没有空间


是否有任何函数或如何执行该操作。

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

select * from usertable where RTRIM(username) = 'xyz'
select * from usertable where username = 'xyz ' AND
                              DATALENGTH(username) = DATALENGTH('xyz ')
编辑:为了匹配包含尾随空格的内容,可以使用函数,如下所示

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

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

select * from usertable where username not like '% '
或者这个:

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

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

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';
对于其中Data='Sharma'和'Sharma'将得到相同的结果

使用SUBSTRINGData,DATALENGTHData,1可以获得列的最后一个字符,并在WHERE子句中添加条件,这将解决您的问题:

DECLARE @TestingValue AS VARCHAR(20) = 'Sharma'; -- 'xyz' -- 'Sharma '

SELECT * FROM @TestTable WHERE Data = @TestingValue AND SUBSTRING(@TestingValue, DATALENGTH(@TestingValue), 1) = ' ' ;
如果将“Sharma”设置为参数值,则上述块返回结果。

这是因为它规定:

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


我的重点

您好,这段代码适合我

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

您正在从phpno运行查询,它位于sql server中2008@Sharmaji使用TrimPlease给我一个示例查询,如果最后有空间,我不想要结果。可能的数据重复是varchar,rtrim将从数据库中删除空间,但我想要的是,如果最后有空间,结果将不会出现…感谢它的工作,但像这样更改查询下面:从usertable中选择*,其中username='xyz'和DATALENGTHusername=DATALENGTH'xyz'实际上,如果用户输入了空格,我不希望得到结果