这是我如何处理它。我希望这将有所帮助。
创建数据库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了这两列在不同的表中 –