Sql server TSQL 2008使用LTrim(RTrim),数据中仍有空格
在将旧数据表移动到新数据表之前,我清理了旧数据表中的数据。其中一个字段在列的右侧和左侧有空格。我编写了以下代码来解决此问题,但仍有前导空格??使用此代码时,大部分数据是干净的,但由于某些原因,RT地址之前有空格…还有其他人有吗d这类问题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
,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字符会困扰我。+1CAST(x为VARBINARY(64))
是最好的建议。快速比较十六进制中的差异会产生所有差异。
LTRIM(RTRIM(REPLACE(my-column, NCHAR(0x00A0), '')))
ASCII
SELECT REPLACE('NaughtyString', CHAR(160),'')