|
■No58751 (OSADA さん) に返信
> PLSQLにて 変数に格納された値の最初に見つかったアンダースコア「_」以降4文字を取得したいのですが、
> シンプルなやり方を教授いただけますか
DECLARE
X1 VARCHAR2(100);
X2 VARCHAR2(100);
X3 VARCHAR2(100);
Y1 VARCHAR2(4);
Y2 VARCHAR2(4);
Y3 VARCHAR2(4);
BEGIN
X1 := '○○電気_01136789_なんとか事務所';
X2 := '後続文字が4文字未満_ora';
X3 := 'アンダースコアなし';
DBMS_OUTPUT.PUT_LINE(' --- 方法1(やじゅさん案) --- ');
Y1 := SUBSTRB(X1, INSTRB(X1, '_') + 1, 4);
Y2 := SUBSTRB(X2, INSTRB(X2, '_') + 1, 4);
Y3 := SUBSTRB(X3, INSTRB(X3, '_') + 1, 4);
DBMS_OUTPUT.PUT_LINE('1=[' || Y1 || ']'); -- 1=[0113]
DBMS_OUTPUT.PUT_LINE('2=[' || Y2 || ']'); -- 2=[ora]
DBMS_OUTPUT.PUT_LINE('3=[' || Y3 || ']'); -- 3=[アン]
DBMS_OUTPUT.PUT_LINE(' --- 方法2(やじゅさん案/改) --- ');
Y1 := SUBSTR(X1, INSTR(X1 || '_', '_')+1, 4);
Y2 := SUBSTR(X2, INSTR(X2 || '_', '_')+1, 4);
Y3 := SUBSTR(X3, INSTR(X3 || '_', '_')+1, 4);
DBMS_OUTPUT.PUT_LINE('1=[' || Y1 || ']'); -- 1=[0113]
DBMS_OUTPUT.PUT_LINE('2=[' || Y2 || ']'); -- 2=[]
DBMS_OUTPUT.PUT_LINE('3=[' || Y3 || ']'); -- 3=[]
DBMS_OUTPUT.PUT_LINE(' --- 方法3 --- ');
Y1 := SUBSTR(REGEXP_SUBSTR(X1, '_(.{4})'), 2);
Y2 := SUBSTR(REGEXP_SUBSTR(X2, '_(.{4})'), 2);
Y3 := SUBSTR(REGEXP_SUBSTR(X3, '_(.{4})'), 2);
DBMS_OUTPUT.PUT_LINE('1=[' || Y1 || ']'); -- 1=[0113]
DBMS_OUTPUT.PUT_LINE('2=[' || Y2 || ']'); -- 2=[]
DBMS_OUTPUT.PUT_LINE('3=[' || Y3 || ']'); -- 3=[]
DBMS_OUTPUT.PUT_LINE(' --- 方法4 --- ');
Y1 := SUBSTR(REGEXP_SUBSTR(X1, '_(.{1,4})'), 2);
Y2 := SUBSTR(REGEXP_SUBSTR(X2, '_(.{1,4})'), 2);
Y3 := SUBSTR(REGEXP_SUBSTR(X3, '_(.{1,4})'), 2);
DBMS_OUTPUT.PUT_LINE('1=[' || Y1 || ']'); -- 1=[0113]
DBMS_OUTPUT.PUT_LINE('2=[' || Y2 || ']'); -- 2=[ora]
DBMS_OUTPUT.PUT_LINE('3=[' || Y3 || ']'); -- 3=[]
END;
|