Sql server TSQL 2008使用LTrim(RTrim),数据中仍有空格

Sql server TSQL 2008使用LTrim(RTrim),数据中仍有空格,sql-server,formatting,trim,Sql Server,Formatting,Trim,在将旧数据表移动到新数据表之前,我清理了旧数据表中的数据。其中一个字段在列的右侧和左侧有空格。我编写了以下代码来解决此问题,但仍有前导空格??使用此代码时,大部分数据是干净的,但由于某些原因,RT地址之前有空格…还有其他人有吗d这类问题 ,CASE WHEN PropStreetAddr IS NOT NULL THEN (CONVERT(VARCHAR(28),PropStreetAddr)) WHEN PropStreetAddr is NOT NULL Then (Sele

在将旧数据表移动到新数据表之前,我清理了旧数据表中的数据。其中一个字段在列的右侧和左侧有空格。我编写了以下代码来解决此问题,但仍有前导空格??使用此代码时,大部分数据是干净的,但由于某些原因,RT地址之前有空格…还有其他人有吗d这类问题

,CASE   
WHEN PropStreetAddr IS NOT NULL
 THEN  (CONVERT(VARCHAR(28),PropStreetAddr))  
WHEN PropStreetAddr is NOT NULL Then  (Select LTrim(RTrim(PropStreetAddr)) As PropStreetAddr)
     ELSE NULL END  as 'PROPERTY_STREET_ADDRESS'
样本输出数据:

1234 20th St 
  RT 1 BOX 2  
560 King St  
610 Nowland Rd  
  RT 1  
1085 YouAreHere Ln  
  RT 24 Box 12  
使用:


这是一个有效的表达式。我假设没有不可见的内容。如果您怀疑它,您仍然应该执行@OMG Ponies建议。如果您必须处理不可见的内容,我认为可以将PATINDEX表达式添加到此表达式中

SQL Server CASE只处理一个WHEN子句,然后就中断了。因此,您永远不会进行第二次数据转换。此外,当您使用LTRIM和RTRIM函数时,所有空值都将转换为空值。因此,您不需要对其进行测试,除非您想对空值进行处理

那么,试试这个:

CONVERT(VARCHAR(28), LTRIM(RTRIM(PropStreetAddr))) as [PROPERTY_STREET_ADDRESS]

我也遇到过同样的问题——将字符串包装在一个CAST中(x为varbinary(64))显示十六进制,从中我看到了A000——我认为这是不间断的空格

若要删除,请尝试此选项(对于UNICODE)


我有一个类似的情况,最初我认为LTRIM和RTRIM函数工作不正常。但是,一旦我测试了它,发现它不是一个合适的空白字符(实际字符可能与您的不可打印字符不同),使用:

我发现这个角色名为160,于是我做了一个替换,比如:

SELECT REPLACE('NaughtyString', CHAR(160),'') 

希望它能帮助某人

复制-查看我的答案,了解如何删除不可打印的内容。如果没有更改,我会被难倒。@JMS49:您是否尝试了替换&它的内容?我唯一能想到的另一件事是将数据放入编辑器,在那里您可以打开不可见内容的可见性(例如,Textpad中的向后p)是的,我在你写代码时使用了代码。将数据输入WORD并要求它显示所有隐藏字符样本数据:…124..伍德利公园路..1085…TRAIL CT..765…K街..506..大道B.1500..R街..街..760…N街1865..D街1810…A街..645…15..街..RT..1.这让我觉得修剪组合不起作用,但是为什么?@JMS49:LTRIM/RTRIM只在各自边缘的空间上工作-这将把两个空间变成一个:
REPLACE(PropStreetAddr,,”)
愚蠢的注释吃空格-第一个应该是两个,第二个应该是一个。UPDATE#LTS_映射集MERS_ID=REPLACE(MERS_ID,SUBSTRING(MERS_ID,PATINDEX)(')%[[AZ-ZA-ZO-9′'''''′'%',MelsIID,1),'')其中PATCODE('%[Z-Z-ZO-9′'',''','%'',MelsIID)0 null null null null null null null,空是PaLRAH条目.这出现在几个列中.我已经运行了子串替换代码和转换(LTRIM)(rtrim仍然没有重新定义这个小流氓。Bobs和@OMG Ponies你是最棒的!太棒了,我想我的头痛也会消失的!谢谢你们两位。这个网站上有一些很棒的人。这显然是一个很老的答案,但对于那些来自SO或谷歌的人,我不会推荐这种方法,尤其是如果你是你要处理国际化问题。看看@MarkMcGee,了解剖析这个问题的正确方法。+1.我刚刚遇到了这个问题,这对我很有帮助。我从来没有想到这个Unicode字符会困扰我。+1
CAST(x为VARBINARY(64))
是最好的建议。快速比较十六进制中的差异会产生所有差异。
LTRIM(RTRIM(REPLACE(my-column, NCHAR(0x00A0), '')))
ASCII
SELECT REPLACE('NaughtyString', CHAR(160),'')