我有一個表,其中有一個 ColumnA,其中包含帶有空格和特殊字符的資料。我想用來自 ColumnA 的資料生成 ColumnB 并洗掉空格和特殊字符。
例如, ColumnA 的值如下:
N/A
@email
Hot-topic
#sql#%
White paper.
我想要一個帶有值的新列:
NA
email
HotTopic
sql
Whitepaper
我在 SSMS 中嘗試了下面的 SQL,但它沒有完全作業。有人可以幫我嗎?
SELECT code,
REPLACE(REPLACE(code, TRIM(TRANSLATE(code,'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',' '))
,'') ,' ','')
FROM SAMP
它不適用于具有價值的記錄:#sql#%
uj5u.com熱心網友回復:
添加為 wiki 答案以保留 @lptr 的評論。通過@lptr 解釋我的(@DaleK)查詢。
您的嘗試很接近,但僅適用于單個字符...失敗的原因是您有多個字符需要替換,并且一旦洗掉了空格,它們就彼此相鄰并且不再與原始字串匹配.
這個答案巧妙地將所有字母字符替換為“*”,使用 translate 作為步驟 1,然后在原始列值上再次使用 translate,將所有非字母字符替換為“*”作為步驟 2,然后最后替換所有“ *" 帶有空字串的字符。
還要注意使用replication以避免多次鍵入相同的字符。
create table samp(code varchar(50));
insert into samp(code)
values
('N/A'),
('@email'),
('Hot-topic'),
('#sql#%'),
('White paper. ');
select s.code, n.nonletters, l.letters
from samp as s
cross apply (values(translate(s.code, 'abcdefghijklmnopqrstuvwxyz', replicate('*', 26)))) as n (nonletters)
cross apply (values(replace(translate(s.code, n.nonletters, replicate('*', len(n.nonletters '.')-1)), '*', ''))) as l (letters);
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/454751.html
