SQL在许多的第一次出现字符串分割

问题描述 投票:2回答:1

我在街上含和housenumber我的数据库哈瓦的字段。我想在新列分裂housenumber。我可以像成才这样做

INSERT INTO mytable(housenumber) VALUES SELECT ??? FROM mytable ?
sql postgresql
1个回答
3
投票

最简单的解决方案似乎使用substring function with regular expressions。我希望你的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)
© www.soinside.com 2019 - 2024. All rights reserved.