C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: PLSQL 最初に見つかったアンダースコア以降4文字


(過去ログ 98 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■58751 / inTopicNo.1)  PLSQL 最初に見つかったアンダースコア以降4文字
  
□投稿者/ OSADA (1回)-(2011/04/25(Mon) 17:58:14)

分類:[データベース全般] 

お世話になります。

PLSQLにて 変数に格納された値の最初に見つかったアンダースコア「_」以降4文字を取得したいのですが、シンプルなやり方を教授いただけますか

例:
○○電気_01136789_なんとか事務所

↑↑
の場合は"0113"を取得したい。
引用返信 編集キー/
■58755 / inTopicNo.2)  Re[1]: PLSQL 最初に見つかったアンダースコア以降4文字
□投稿者/ やじゅ (1877回)-(2011/04/25(Mon) 21:24:37)
やじゅ さんの Web サイト
No58751 (OSADA さん) に返信
> PLSQLにて 変数に格納された値の最初に見つかったアンダースコア「_」以降4文字を取得したいのですが、シンプルなやり方を教授いただけますか
>
> 例:
> ○○電気_01136789_なんとか事務所
>
> ↑↑
> の場合は"0113"を取得したい。

未確認なので微妙に間違っているかも。
SELECT SUBSTRB('○○電気_01136789_なんとか事務所',INSTRB('○○電気_01136789_なんとか事務所','_')+1,4) FROM DUAL

引用返信 編集キー/
■58759 / inTopicNo.3)  Re[1]: PLSQL 最初に見つかったアンダースコア以降4文字
□投稿者/ 魔界の仮面弁士 (2156回)-(2011/04/26(Tue) 04:18:59)
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;

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -