寻找SQL查询将值拆分为另一列

时间:2017-11-13 10:58:58

标签: sql oracle

我正在使用下面的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

问候。

2 个答案:

答案 0 :(得分:0)

基本上,如果服务器名称始终是属性(逗号分隔)列表中的最后一个值,那么根本不需要查看其余属性。

SELECT 
      upper(regexp_substr(db_attributes, '[^,]+$',1,1)) AS servername
    , db_attributes
FROM
    tablename

<强>更新

而且,如果你想测试它,这里是SQLFiddle link

答案 1 :(得分:0)

SQL Fiddle

Oracle 11g R2架构设置

CREATE TABLE table_name ( db_attributes ) AS
SELECT 'bsprod04.hbtr.adroot.hsbc, 49465, BSPROD04\PTRFRDS01' FROM DUAL UNION ALL
SELECT 'hkw00100308c01.hbap.adroot.hsbc, 2433, HKW00100308C01' FROM DUAL UNION ALL
SELECT 'ora-abacogp.de.hsbc, 1626, ABACOGP' FROM DUAL

查询1

SELECT REGEXP_SUBSTR( db_attributes, '\S+$' ) AS servername,
       db_attributes
FROM   table_name

<强> Results

|         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 |

查询2

SELECT SUBSTR( db_attributes, INSTR( db_attributes, ' ', -1 ) + 1 ) AS servername,
       db_attributes
FROM   table_name

<强> Results

|         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 |