1
SQL ServerのINSTR(...)およびREPLACE(REGEXP_SUBSTR(...))オラクル関数の使用を置き換える方法をお探しです。SQL ServerのREGEXP_SUBSTRを置換してください
オリジナルオラクル:私はCHARINDEXとPATINDEXを見てみましたが、何も出てパンしていない、私は、元の正規表現式はに私の頭の上にあると思い
+---------------------------------+----------------------+------------------------------+
| NAME | OPT | Name2 |
+---------------------------------+----------------------+------------------------------+
| AE 344592001H 6186694 | NULL | NULL |
| AE_161038002_6044777 | 6044777 | 161038002 |
| BC_VIVS_HNB011A_1WAM | HNB011A | VIVS |
| BC_56230A_30SP | 30SP | 56230A |
| CG_3334902_NETWK_ ACTLM_3334912 | NETWK_ ACTLM_3334912 | 3334902_NETWK_ ACTLM_3334912 |
| CG_3334574_HMO1_CORACT_3334575 | HMO1_CORACT_3334575 | 3334574_HMO1_CORACT_3334575 |
| CG_3207160_POSC_1502AH_3207161 | POSC_1502AH_3207161 | 3207160_POSC_1502AH_3207161 |
| UH_141015_RHM | RHM | 141015 |
| UH_127757_RIV | RIV | 127757 |
| UH 523725 RIV | NULL | NULL |
| BS_W0055785_C500_M0005672 | C500 | W0055785 |
+---------------------------------+----------------------+------------------------------+
:
SELECT
Name,
CASE
WHEN SUBSTR (NAME, 1, 2) = 'CG'
THEN SUBSTR (NAME,INSTR (NAME,'_',1,2)+ 1,LENGTH (NAME))
ELSE REPLACE (REGEXP_SUBSTR (NAME,'_[^_]+',1,2),'_','')
END AS OPT,
CASE
WHEN SUBSTR (NAME, 1, 2) = 'CG'
THEN SUBSTR (NAME,INSTR (NAME, '_',1,1) + 1, LENGTH (NAME))
ELSE REPLACE (REGEXP_SUBSTR (NAME,'_[^_]+',1,1),'_','')
END as Name2
が出力例を更新しましたで始まる。どのように私はSQL Serverでこのロジックを模倣することができるかについての任意のアイデア?
ありがとうございます!信じられないほどの解決策。私は "CG"行といくつかのより良い例を含むように私の例を更新しました。あなたのソリューションはとても近いですが、CGレコードは解析されません。それについての考えは?あなたはコードが私の外にあり、解剖しようとしています。ありがとう! – russds
@russds更新 - 両方の解決策が望ましい出力を出すように見えます。クエリ2はより効率的です(そしてはるかに簡単です)。 – MT0