这就是我解决它的方式。我希望这将有所帮助。
创建数据库TestDB
去
使用测试数据库
去
--创建样本表CustomerAddress
创建表客户地址(地址字符(100))
去
插入客户地址值('123 Main St')
插入 CustomerAddress 值('XYZ St')
插入 CustomerAddress 值('abc')
从客户地址中选择 *
--选项#1a - 拆分地址列,当没有街道号码时替换为空值
选择
Street_Number =
CASE WHEN (ISNUMERIC(LEFT(Address, 1)) = 1) THEN LEFT(Address, CHARINDEX(' ', Address))
别的 ''
结尾 ,
街道名称 =
CASE WHEN (ISNUMERIC(LEFT(Address, 1)) = 1) THEN substring(Address, CHARINDEX(' ', Address) + 1, len(Address) - (CHARINDEX(' ', Address) - 1))
其他地址
结尾
FROM [dbo].CustomerAddress;
--选项#1b - 拆分地址列,当没有街道号码时替换为 NULL
选择
Street_Number =
CASE WHEN (ISNUMERIC(LEFT(Address, 1)) = 1) THEN LEFT(Address, CHARINDEX(' ', Address))
否则为空
结尾 ,
街道名称 =
CASE WHEN (ISNUMERIC(LEFT(Address, 1)) = 1) THEN substring(Address, CHARINDEX(' ', Address) + 1, len(Address) - (CHARINDEX(' ', Address) - 1))
其他地址
结尾
FROM [dbo].CustomerAddress;
--选项 #2a - 使用 LIKE % 而不是 ISNUMERIC,我们可能会获得更好的性能
选择
Street_Number = CASE WHEN (Address LIKE '[0-9]%') THEN LEFT(Address, CHARINDEX(' ', Address))
否则为空
结束,
Street_Name = CASE WHEN (Address LIKE '[0-9]%') THEN substring(Address, CHARINDEX(' ', Address) + 1, len(Address) - (CHARINDEX(' ', Address) - 1) )
其他地址
结尾
FROM [dbo].CustomerAddress;
--删除表进行清理
删除表 [dbo].CustomerAddress
去