sql-server - 从 t-sql 中的列中提取帖子和地址
问题描述
我在 sql 表中有地址,我需要在单独的列中提取门号、地址和邮政编码
10 westminister way Road, London (NW10 5NQ)
列为;
Address => 19
road => westminister way Road
city => london
postcode => NW10 5NQ
我尝试了以下但提取邮政编码,所以在'select' PostCode之后的以下行中给了我'(NW10 5NQ',在postCode3的下一行中,当我尝试删除时,sql抛出错误(来自CHARINDEX的字符串('(' ,反向([地址]))-1)
错误
Invalid length parameter passed to the LEFT or SUBSTRING function.
SQL
select
,REVERSE(SUBSTRING(REVERSE([address]),2,CHARINDEX('(', REVERSE([address])))) PostCode2
,REVERSE(SUBSTRING(REVERSE([address]),2, CHARINDEX('(', REVERSE([address]))-1 )) PostCode3
,CHARINDEX('(', REVERSE([address]))-2 index
上面的索引给了我答案 8,如果我执行以下代码,它会按照我上面的要求给我正确的 postCode,
REVERSE(SUBSTRING(REVERSE([Land Description]),2, 8)) PostCode4 //==> answer ==>NW10 5NQ
我不确定我在这里缺少什么
解决方案
你想要的 SQL 是:
REVERSE(SUBSTRING(REVERSE(@address),2, CHARINDEX('(', REVERSE(@address))-2))
您的“postcode3”尝试很接近,但您莫名其妙地从子字符串的长度中减去了一个而不是两个,即使在您的“索引”行中,您证明减去两个会导致所需的长度为 8。
证明:
DECLARE @address varchar(255);
SET @address = '10 westminister way Road, London (NW10 5NQ)'
select
REVERSE(SUBSTRING(REVERSE(@address),3,CHARINDEX('(', REVERSE(@address)))) PostCode2
,REVERSE(SUBSTRING(REVERSE(@address),2, CHARINDEX('(', REVERSE(@address))-2)) PostCode3
,CHARINDEX('(', REVERSE(@address))-2 [index]
产生:
PostCode2 PostCode3 index
n (NW10 5N NW10 5NQ 8
推荐阅读
- javascript - 如何在服务器端渲染中动态导入 React 组件并将其作为属性传递给 App 组件?
- javascript - void.delete() (discord.JS v13)
- javascript - 在不刷新页面的情况下获取数据
- javascript - 如何对 Vue 3“脚本设置”组合 API 上的路由更改做出反应?
- functional-programming - 如何修复函数式编程语言中“f = lambda x: f(x)+1”的无限循环错误?
- python - xgboost 中的弃用警告
- react-native - 如何将插入平面列表作为项目放入另一个平面列表中?
- sql - 有条件地更新 column1 或 column2 或 column3
- python - 在python中从外部更改和设置封装参数
- python - 如何在python中打印黑桃、红心、钻石等