我在使用字符列连接2个表的T-SQL查询时遇到了困难。我怀疑有一些空白差异导致问题,但无法追踪它们。为了测试这个理论,我想从连接列中删除所有空格,看看是否能解决问题。不幸的是,我仍然坚持如何删除T-SQL字符串中的所有空格。这是一个显示我尝试过的简单示例(参见测试列):
select
str,
test1 = replace(str, '\\s+' , ''),
test2 = replace(str, '[\s]*' , '')
from
(
values
(''),
(' '),
(' xyz'),
('abc '),
('hello world')
) d (str);
有没有办法让它在T-SQL中运行?
澄清:通过空格,我的意思是删除以下所有内容:
\s white space (space, \r, \n, \t, \v, \f)
' ' space
\t (horizontal) tab
\v vertical tab
\b backspace
\r carriage return
\n newline
\f form feed
\u00a0 non-breaking space
答案 0 :(得分:2)
Replace(str,' ', '')
答案 1 :(得分:2)
这段代码帮助弄清楚原始查询中出现连接问题的确实是什么类型的空白:
select distinct
fieldname,
space = iif(charindex(char(32), fieldname) > 0, 1, 0),
horizontal_tab = iif(charindex(char(9), fieldname) > 0, 1, 0),
vertical_tab = iif(charindex(char(11), fieldname) > 0, 1, 0),
backspace = iif(charindex(char(8), fieldname) > 0, 1, 0),
carriage_return = iif(charindex(char(13), fieldname) > 0, 1, 0),
newline = iif(charindex(char(10), fieldname) > 0, 1, 0),
formfeed = iif(charindex(char(12), fieldname) > 0, 1, 0),
nonbreakingspace = iif(charindex(char(255), fieldname) > 0, 1, 0)
from tablename;
事实证明,其中一个表的数据中有回车符和新换行符。因此,使用@scsimon的解决方案,通过将连接更改为此来解决此问题:
on REPLACE(REPLACE(a.fieldname, CHAR(10), ''), CHAR(13), '') = b.fieldname
答案 2 :(得分:1)
我建议您删除空格和tabs
(4个空格):
SELECT REPLACE(REPLACE(str,' ', ''), char(9), '')
答案 3 :(得分:0)