JMS*_*S49 7 sql-server formatting trim
我将数据清理到旧数据表中,然后再将其移动到新数据表中.其中一个字段在列中左右有空格.我写了下面的代码来解决这个问题,但仍然有领先的空间?使用此代码时,大部分数据都是干净的,但由于某种原因,在RT地址之前有空格......有其他人有这种类型的问题吗?
,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'
Run Code Online (Sandbox Code Playgroud)
样本输出数据:
1234 20th St
RT 1 BOX 2
560 King St
610 Nowland Rd
RT 1
1085 YouAreHere Ln
RT 24 Box 12
Run Code Online (Sandbox Code Playgroud)
Mar*_*Gee 11
我遇到了同样的问题 - 在CAST中包装字符串(x作为varbinary(64))显示了十六进制,从中我看到A000 - 我认为它是非破坏性的空间.
要删除,请尝试此操作(对于UNICODE);
LTRIM(RTRIM(REPLACE(my-column, NCHAR(0x00A0), '')))
Run Code Online (Sandbox Code Playgroud)
使用:
WHEN PropStreetAddr is NOT NULL THEN
(SELECT LTRIM(RTRIM((REPLACE(PropStreetAddr,
SUBSTRING(PropStreetAddr,
PATINDEX('%[^a-zA-Z0-9 '''''']%', PropStreetAddr), 1), '') AS PropStreetAddr)
Run Code Online (Sandbox Code Playgroud)
这是可行的表达方式.我假设没有不可见的内容.如果你怀疑它,你仍然应该追求@OMG Ponies的推荐.我认为如果必须处理不可见的内容,可以将PATINDEX表达式添加到此表达式中.
SQL Server CASE只处理一个WHEN子句然后中断.所以你永远不会进行第二次数据转换.此外,使用LTRIM和RTRIM函数时,所有NULL值都将转换为NULL.所以,你不需要测试它,除非你想用NULL做一些事情.
所以,试试这个:
CONVERT(VARCHAR(28), LTRIM(RTRIM(PropStreetAddr))) as [PROPERTY_STREET_ADDRESS]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
24046 次 |
最近记录: |