我在街上含和housenumber我的数据库哈瓦的字段。我想在新列分裂housenumber。我可以像成才这样做
INSERT INTO mytable(housenumber) VALUES SELECT ??? FROM mytable ?
最简单的解决方案似乎使用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)