2013-02-28 76 views
0

我在嘗試將遺留數據轉換爲新的正確結構化的SQL數據庫。爲了簡單起見,可以說一箇舊表包含兩個字段,即Id和Emails。這裏是一些數據。在SQL中處理&符和特殊字符

ID | Emails 
0 [email protected], [email protected], [email protected] 
1 [email protected] 

我想帶他們到新表所示:

INSERT INTO NewTable(Id, [Address]) 
Select t.Id, split.val 
From OldTable t 
Cross Apply dbo.Split(t.Emails, ',') split 
WHERE t.Emails <> '' 

這種運作良好,直到我碰到一個電子郵件:

ID | Emails 
0 [email protected] 
0 [email protected] 
0 [email protected] 
1 [email protected] 

我可以用這個TSQL做到這一點那裏有一個特殊的字符就像這樣: 電子郵件@湯姆& jerry.com

的符號打破了查詢,並引發以下錯誤:
消息9411,級別16,狀態1,行3
XML分析:行1,字符27,分號預計

什麼是最簡單的方法繞過錯誤並將電子郵件映射到新表中:email @ tom & jerry.com

謝謝。

+0

請用您正在使用的數據庫版本標記您的問題。如果是SQL Server,你使用了什麼'dbo.Split'實現? – HABO 2013-02-28 17:02:28

回答

1

您可以直接簡單地使用替換替換所有&符號,例如「AANNDD」或「>> AND <'。

SELECT REPLACE(Emails, '&', '>>AND<<')... 

然後,只需在完成後將其替換回來即可。

您可以在插入之前替換舊錶格中的所有字節。然後在你的新表上運行更新。

+0

是的。我可以用'&'代替'&',那效果很好。我只是想知道是否有這樣的最佳做法。謝謝。 – BBauer42 2013-02-28 16:57:36

+0

有時最簡單的方法是最好的。 – Narnian 2013-02-28 16:59:26

+1

@ BBauer42 - 最好的做法是使用更好的「Split」實現。它應該在提供的分隔符上進行拆分,並且可以有選擇地處理帶引號的字符串。否則,它不應該在普通字符上跳躍。 – HABO 2013-02-28 20:44:53