我想知道如何识别表格中的尾随空格。我正在使用SQL Server 2008并将下表创建为测试
CREATE TABLE first_test_name
(
firstName varchar(255)
)
然后插入一条这样的记录:
insert into first_test_name (firstName)
values('Bob')
然后我尝试插入一个空格,然后添加一个像这样的新记录:
insert into first_test_name (firstName)
values('Bob ') -- just 1 space
第三次,
insert into first_test_name (firstName)
values('Bob ') -- two spaces used this time.
现在如果我查询'Bob'(没有空格),我仍然得到3的计数。 我的疑问是:
select count(*) from first_test_name WHERE firstName = 'Bob'
答案不应该是1?
此外,我在此表上使用了sp_help
,并且“Trim Trailing Blanks”的值设置为no。
那为什么我得到3分?我只期待一次。
在相关说明中,如果我使用此查询进行搜索
select * from first_test_name
where firstName like '% '
然后我找到了两行的正确答案。
所以重申一下,问题是为什么我在搜索'Bob'时得到3分。 此外,在这种情况下,“修剪尾随空白”是什么意思?
答案 0 :(得分:6)
为什么我在搜索'Bob'时得到3分?
SQL Server ignores trailing spaces in most string comparisons.
此外,在这种情况下,“修剪尾随空白”是什么意思?
这会告诉您创建表时设置的ANSI_PADDING
选项。
如何识别带有1或2个尾随空格的那两个?
这是一种方式。
SELECT *
FROM first_test_name
WHERE firstName LIKE 'Bob '
找到没有尾随空格的
SELECT *
FROM first_test_name
WHERE firstName LIKE 'Bob' AND firstName NOT LIKE 'Bob '
答案 1 :(得分:3)
SQL Server将在比较期间使用空格扩展字符串。
这就是我要做的事情:
SELECT COUNT(*)
FROM first_test_name
WHERE REPLACE(firstName, ' ', '_') = 'Bob'
答案 2 :(得分:2)
SELECT * 来自用户 WHERE DATALENGTH(用户名)<> DATALENGTH(RTRIM(用户名))
答案 3 :(得分:1)
另一种方法可能是在字符串上附加内容。
declare @test table(
id varchar(4) not null,
firstname varchar(255) not null)
insert into @test values('1', 'Bob')
insert into @test values('2', 'Bob ')
insert into @test values('3', 'Bob ')
insert into @test values('4', ' Bob')
select count((firstname + 'end')) from @test
where (firstname + 'end') not like '% %'
查询将返回计数1.
答案 4 :(得分:1)
一个很好的干净方法是将原始字符串与Rtrim版本本身进行比较,如果它们不匹配,例如:
SELECT *
FROM First_Test_Name
WHERE Firstname <> RTrim(Firstname)
这应该返回Firstname有尾随空格的所有记录(我认为......)