SQL在数字的第一次出现时分割字符串[英] SQL split string at first occurance of a number

本文是小编为大家收集整理的关于SQL在数字的第一次出现时分割字符串的处理方法,想解了SQL在数字的第一次出现时分割字符串的问题怎么解决?SQL在数字的第一次出现时分割字符串问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我的数据库中有一个包含街道和门牌号的字段.我想将门牌号拆分为新列.我可以通过类似的方式来做到这一点

INSERT INTO mytable(housenumber) VALUES SELECT ??? FROM mytable ?
解决方案

似乎最简单的解决方案是使用带有正则表达式的子字符串函数.我希望你的 PostgreSQL 版本支持它们.

SELECT adres,
       substring(adres from '^.*?(?=[0-9]|$)') AS street,
       substring(adres from '[0-9].*$') AS housenum
  FROM mytable;
      adres      |  street   |    housenum
-----------------+--------------+-----------------
 some string 12  | some string  | 12
 another 2c      | another      | 2c
 no number       | no number    | 
 99 first number |              | 99 first number
 withnumber1 234 | withnumber   | 1 234
(5 rows)

正如评论中提到的NullUserException,街道名称本身可能包含一个数字,不应将其视为门牌号码.在这种情况下,我假设"门牌号"可以定义为以数字开头、前面有空格的子字符串.

在这种情况下,正则表达式看起来是这样的:

SELECT adres,
       substring(adres from '^.*?(?=\\s[0-9]|$)') AS street,
       substring(adres from '\\s([0-9].*)$') AS housenum
  FROM mytable;

然后示例将被不同地拆分:

      adres      |    street       | housenum
-----------------+-----------------+-----------
 some string 12  | some string     | 12
 another 2c      | another         | 2c
 no number       | no number       | 
 99 first number | 99 first number | 
 withnumber1 234 | withnumber1     | 234
(5 rows)

本文地址:https://www.itbaoku.cn/post/1764130.html