SQL表尾随空格导致错误

问题描述:

我在我的C#代码中发生错误,并且在调试后发现 这是因为在表中的条目中存在尾随空格。 例如“AAA”SQL表尾随空格导致错误

在我的C#代码

现在尝试设置组合框的选定值这个(组合框与“AAA”的价值的项目和失败。

显然,解决的方法是修复DB 'AAA'

现在我去到DB

,并做到这一点:

Select * from mytable 
where Name='aaa' 

我得到的名称'aaa'

Select * from mytable 
where Name='aaa  ' 

我再次得到名称'aaa'

Select len(name) from My table 
where name ='aaa' 

我得到3

我的问题是:如何查询我知道它有 'AAA' 的额外空间的表?

+0

这是它如何工作的SQL Server中。 –

+0

因此,我无法查看表格数据并检查它是否有拖尾空格? –

+2

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

SQL服务器len函数不包括尾随空白。

考虑使用不修剪字符串的DATALENGTH(Transact-SQL)函数。

因此,您可以检查是否datalength(column) <> datalength(rtrim(column))找到它是否包含尾随空格。

注意:如果处理一个unicode字符串,DATALENGTH将返回两倍的字符数。

+0

是的。这就是答案。 –

正如Giorgi Nakeuri所解释的,'a        '和'a'被认为是相等的。但是你可以很容易地找到LIKE尾随空格:

select * from mytable where name like '% '; 

这里是如何更新:

update mytable set name = rtrim(name) where name like '% ';