首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >第一次出现数字时的SQL拆分字符串

问第一次出现数字时的SQL拆分字符串
EN

Stack Overflow用户
提问于 2011-09-05 21:01:17
回答 1查看 4.9K关注 0票数 2

我的数据库中有一个包含街道和门牌号的字段。我想把房号分成一个新的栏目。我可以这样做吗?

代码语言:javascript
复制
INSERT INTO mytable(housenumber) VALUES SELECT ??? FROM mytable ?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-05 21:38:06

最简单的解决方案似乎是使用substring function with regular expressions。我希望你的PostgreSQL版本支持它们。

代码语言:javascript
复制
SELECT adres,
       substring(adres from '^.*?(?=[0-9]|$)') AS street,
       substring(adres from '[0-9].*$') AS housenum
  FROM mytable;
代码语言:javascript
复制
      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在评论中提到的那样,街道名称本身可能包含一个数字,这不应被视为门牌号码。在这种情况下,我认为“门牌号”可以定义为以数字开头,前面有一个空格的子字符串。

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

代码语言:javascript
复制
SELECT adres,
       substring(adres from '^.*?(?=\\s[0-9]|$)') AS street,
       substring(adres from '\\s([0-9].*)$') AS housenum
  FROM mytable;

然后,示例将以不同的方式拆分:

代码语言:javascript
复制
      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)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7308485

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档