這是我如何處理它。我希望這將有所幫助。
創建數據庫TESTDB 去
使用TESTDB GO - 創建樣品表CustomerAddress 創建表CustomerAddress(地址CHAR(100)) 去
插入到CustomerAddress VALUES('123主街') 插入到CustomerAddress值('XYZ St') 插入到CustomerAddress值('abc')
select * from Custome rAddress
--option#1A - 複式地址列,當沒有街道號碼與空值代替 SELECT
Street_Number = CASE WHEN(ISNUMERIC(LEFT(地址,1))= 1)THEN LEFT(地址, CHARINDEX('',Address)) ELSE'' END, Street_Name = CASE WHEN(ISNUMERIC(LEFT(Address,1))= 1)THEN substring(Address,CHARINDEX('',Address)+ 1,len (地址) - (CHARINDEX('',地址) - 1)) ELSE地址 END FROM [dbo] .CustomerAddress;
--option#1B - 拆分地址列,當沒有街道號碼替換爲NULL SELECT
Street_Number = CASE WHEN(ISNUMERIC(LEFT(地址,1))= 1)THEN LEFT(地址,CHARINDEX( ',Address)) ELSE NULL END, Street_Name = CASE WHEN(ISNUMERIC(LEFT(Address,1))= 1)THEN substring(Address,CHARINDEX('',Address)+ 1,len(Address) - (CHARINDEX('',Address) - 1)) ELSE Address END FROM [dbo] .CustomerAddress;
--option#2A - 使用諸如%,而不是ISNUMERIC,我們可能會獲得更好的性能
選擇
Street_Number = CASE WHEN(地址LIKE '[0-9]%')然後離開(地址, CHARINDEX( ' '地址)) ELSE NULL END,
STREET_NAME = CASE WHEN(地址LIKE '[0-9]%')THEN SUBSTRING(地址,CHARINDEX('',地址)+ 1,LEN (地址) - (CHARINDEX('',地址) - 1)) ELSE地址 END FROM [dbo]。CustomerAddress;
通過刪除表 DROP TABLE [DBO] .CustomerAddress 去
我從一個單獨的表中獲取的地址欄,然後使用代碼分成街道編號和名稱列和存儲--clean了這兩列在不同的表中 –