【发布时间】:2018-04-26 00:58:36
【问题描述】:
我正在使用下面的 SQL 代码将一列的值拆分为另一列,但它没有按我预期的方式工作。请找到下面的代码以及我得到的输出。
查询:
select
upper(regexp_replace(regexp_substr(db_attributes,'.([^\.-]+),([^\,-]+), ([^\,-]+)[so]?[\,-]',1,1,'i',1),'[so]$','') ) AS servername, db_attributes
from table_name
电流输出:
servername db_attributes
HSBC bsprod04.hbtr.adroot.hsbc, 49465, BSPROD04\PTRFRDS01
NULL hkw00100308c01.hbap.adroot.hsbc, 2433, HKW00100308C01
NULL ora-abacogp.de.hsbc, 1626, ABACOGP
期望的输出:
servername db_attributes
BSPROD04\PTRFRDS01 bsprod04.hbtr.adroot.hsbc, 49465, BSPROD04\PTRFRDS01
HKW00100308C01 hkw00100308c01.hbap.adroot.hsbc, 2433, HKW00100308C01
ABACOGP ora-abacogp.de.hsbc, 1626, ABACOGP
问候。
【问题讨论】:
-
请给出
table_name表的内容。 -
@Dominique 表的列名为“db_attributes”,其中包含所有服务器信息,所以我想将“db_attributes”列的最终值拆分为一个名为“servername”的新列,并且希望看到上面提到的输出。
-
正则表达式会比
SUBSTR和INSTR慢很多。 -
@MT0,在一个有 3 条记录的表中,它不会有太大的区别。此外,假设表中有 100,000 多条记录...与
substr和instr调用的组合相比,单个regexp_substr调用(每条记录)要慢多少?跨度> -
@PeterAbolins stackoverflow.com/a/41166356/1509264 那里的测试表明正则表达式可能比字符串函数慢 40 倍。