2017-11-08 1 views
0

列の値を3つの異なる列に分割する際にクエリのヘルプが必要です。列の値を3つの異なる列に分割する際にクエリが必要です

これは私のデータベースにある列です。

Asset 
---------------------------------------------- 
AP4INPU1:[email protected] 

私は

Asset        InstanceName  ServerName 
--------------------------------------------------------------- 
AP4INPU1:[email protected] AP4INPU1   hkp04lp0605 
rs6000.hk.hsbc 

以下のようにそれを分割したいと思います。最初のサーバー名は、「S」で終わるされているが、私は新しいServerName列に最後に「S」したくありません。

よろしく、

バーラトヴィカス

+1

互換性のないデータベースタグを削除しました。 MySQLとOracleは非常に異なるデータベースです。タグを正しく付けてください。 –

+0

@ GordonLinoff私はOracle SQL Developerツールを使用しています。そのため、MySQLとOracleが含まれています。 – Vikas

答えて

0

これを試してください。

SELECT Asset, 
    REGEXP_SUBSTR(Asset, '(.+):[email protected]',1,1,'i',1) Instancename , 
    REGEXP_SUBSTR(Asset, '[email protected](.+)s-',1,1,'i',1) Servername 
FROM yourtable; 
+0

@ Kaushik Nayakに感謝します。クエリを実行した後、Servernameに 'hkp04lp0605s-rs6000.hk.hsbc'のような出力が表示されますが、 's-rs6000.hk.hsbc'がないと 'hkp04lp0605'しか必要ありません。 – Vikas

+0

@Vikas:Modified。今すぐチェックしてください。 –

+0

は完璧な仲間です。ありがとうございました。 – Vikas

0

サーバー名は、(直前の文字が数字のように見える)2「S」の中で終わっていないと仮定すると、あなたが行うことができます:

select regexp_substr(asset, '[^:]+', 1, 1) as instancename, 
     trim(trailing 's' from trim(':' from regexp_substr(asset, ':[^-]+', 1, 1))) as servername 
from (select 'AP4INPU1:[email protected]' as asset from dual) x 
+0

ありがとうございますが、私のテーブルには何千ものレコードがありますが、私たちは手作業で 'AP4INPU1:[email protected]'というコードを入力しているので、レコードは1つだけです。 – Vikas

+0

@Vikas。 。 。 'from'節は、それが動作することを証明するためのものです。あなたが望むコードは外側の 'select'にあります。 –

+0

ありがとう、私はコードを変更し、現在作業中です。 – Vikas

関連する問題