【问题标题】:Spliting addresses into 2 columns on house number and street name将地址拆分为门牌号和街道名称的 2 列
【发布时间】:2017-02-19 09:26:47
【问题描述】:

如果我正在编写一个返回地址列表(街道编号和街道名称)但这些值存储在同一列中的查询,有没有办法将数字和街道名称分成 2 个不同的列?

exp:

select address
from customer

想要的结果:

123 | any st
345 | some st

这“容易”吗?

我只有读权限,不会在数据库中更改任何内容;它是“原样”

【问题讨论】:

  • oracle 函数 substr 和 instr 可以做到。就个人而言,虽然我有一个地址表,其中包含我想要处理的地址的每一位的列。
  • 显示地址列的示例数据。分隔符是什么?
  • 更改 collums 不是我的选择;我只有读取权限。列是原样
  • 对此要小心。并非所有地址都采用您期望的格式。您可能会得到像“10-1 some st”或“1 some st Apr 10”这样的值。对我来说,它们具有相同的意义。
  • 对于国际地址,房子的“数字”甚至根本不需要是数字;或者它们可能被装饰成“35a”或“3-5”,可能用逗号、空格或其他分隔符分隔,可能在街道名称的前面或末尾以及您能想象到的任何内容。所以我想说没有简单(和安全)的方法。

标签: sql select oracle-sqldeveloper


【解决方案1】:

编辑: 忽略这个答案:我刚刚注意到它适用于 Oracle :(

将此函数添加到您的数据库中

CREATE FUNCTION SPLIT_STR(
  x VARCHAR(255),
  delim VARCHAR(12),
  pos INT
)
RETURNS VARCHAR(255)
RETURN REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos),
       LENGTH(SUBSTRING_INDEX(x, delim, pos -1)) + 1),
       delim, '');

来源http://blog.fedecarg.com/2009/02/22/mysql-split-string-function/

并且 sql 应该是:

select SPLIT_STR(address,' ',1) as address_num, SPLIT_STR(address,' ',2) as address_desc from customer

但分隔符应该是一些唯一的字符或字符串,因为 ' ' 空间可能已经是地址的一部分。

【讨论】:

    猜你喜欢
    • 2017-06-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多