Oracle sql:如何使用 regexp_* 将标记带到两列或更多列
Posted
技术标签:
【中文标题】Oracle sql:如何使用 regexp_* 将标记带到两列或更多列【英文标题】:Oracle sql : How to use regexp_* , to take tokens to two or more columns 【发布时间】:2021-04-16 03:47:16 【问题描述】:如果存在,我如何使用 oracle regexp_*str 拆分 streetnum?目标是创建一个视图 V_MY_USERS,其中包含 3 列 ID、STREET_NUM、STREET_NAME。
MY_USERS - that has two columns
ID STREET_ADDRESS
--------------------
1 991 My Street # Some records start with street number followed by space
2 Don street # some records do not have street num, => null
创建一个视图:V_MY_USERS 有 3 列
ID STREET_NUM STREET_NAME
----------------------------------
1 991 My Street
2 null Don street
【问题讨论】:
像 99A Celal Bayar Blv. 这样的地址怎么样? @mathguy,来自下面的答案 ... REGEXP_SUBSTR(STREET_ADDRESS, '^\w+') as STREET_NUM ,适用于“ 99A Celal Bayar Blv” 在您的第二个示例中,这会将 Don 作为门牌号。 REGEXP_SUBSTR(STREET_ADDRESS, '^\d\w+') AS STREET_NUM, 【参考方案1】:我会在这里使用REGEXP_SUBSTR
和REGEXP_REPLACE
:
CREATE VIEW V_MY_USERS AS
SELECT
ID,
REGEXP_SUBSTR(STREET_ADDRESS, '^\d+') AS STREET_NUM,
REGEXP_REPLACE(STREET_ADDRESS, '^\d+ ', '') AS STREET_NAME
FROM MY_USERS
ORDER BY ID;
Demo
【讨论】:
对不起,第二个是视图(只是一个查询),更新了我的问题。所以没有更新语句。 @Espresso 重新加载您的页面。 非常感谢。我不知道我可以使用在线 oracle 模拟器 :)。查看查询完美运行。再次感谢。 dbfiddle 是否允许测试 V_MY_USERS? @Espresso 不确定是否可以创建视图,但您不需要这样做,因为视图只是包装了一些底层选择查询。更新是另一回事……您应该真正进行测试。 DBFiddle 确实允许测试更新,但我通常不会打扰。以上是关于Oracle sql:如何使用 regexp_* 将标记带到两列或更多列的主要内容,如果未能解决你的问题,请参考以下文章
如何使用Oracle中的SQL中的REGEXP_SUBSTR将自定义消息替换为空插槽
Oracle SQL REGEXP 用不同的列值替换特定字符串