我在我的数据库中包含街道和房屋号码的字段。我想在新的专栏中分割房子号码。我可以通过类似SQL拆分字符串首次发生的一个数字
INSERT INTO mytable(housenumber) VALUES SELECT ??? FROM mytable ?
我在我的数据库中包含街道和房屋号码的字段。我想在新的专栏中分割房子号码。我可以通过类似SQL拆分字符串首次发生的一个数字
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)
如果街道包含一个数字,该怎么办? – NullUserException
然后问题必须以不同的方式定义。我会说“在一些空白之后直接拆分第一个数字”。让我们看看我是否可以为此做一些正则表达式。;-) – Arsen7
那我的地址 - 1,A栋,街,镇 - (并且有一座B楼,我刚刚有一个网络表单,为我提供了两个单位可供选择)您希望建筑物去哪里? – Mark
你的字段是如何格式化的,在街道和门牌号码之间是否有逗号或其他内容? – mslliviu
我的db只包含德文格式的地址,意思是 –
markus