電子書籍の厳選無料作品が豊富!

SQLでDECODEは、完全一致のみですよね?
そのなかで、部分一致でdecodeのようなもの
使用したいときはどうすればよいのでしょうか?
例えば
select
decode(文字,'かい','1',' ')
from emp
にて、文字には'いっかい'や'かいだん'を含めて
ひっかけたいのです。
お手数ですが、どなたか教えてください。

A 回答 (4件)

こんにちわ。



「sign(instr(文字, 'かい'))」 とすればdecode が使えます。
    • good
    • 1
この回答へのお礼

ありがとうございました。
大変助かりました!
感謝です!

お礼日時:2005/09/03 23:47

最近のバージョンは、CASEが使えるので、複雑な比較が出来ますが、


昔は、DECODEしかなかったので、この手の比較は頭を使う必要がありました。(^^;

普通に思うつくのは、INSTRを使うか、REPLACEを使うかでしょうか。
#3で、INSTRが書かれているので、REPLACEを使う例を書きます。

select DECODE(文字,REPLACE(文字,'かい',''),' ','1') from emp;
文字が消せれば、'かい'が置換され、もとの文字列とは違うので、
違う=存在した、と判断する理屈です。

うまく置換対象と置換式を書けば、前方一致でも、後方一致でもチェックが可能です。
(INSTRでも、前方一致、後方一致はチェックできますけどね)
    • good
    • 0
この回答へのお礼

大変ありがとうございます。
非常にわかりやすかったです。
これで、うまくいきそうです。

お礼日時:2005/09/04 22:55

#1の補足です。



SELECT REPLACE(文字,文字,'1') FROM emp WHERE 文字 LIKE '%かい%'
UNION ALL
SELECT REPLACE(文字,文字,' ') FROM emp WHERE 文字 NOT LIKE '%かい%'

結果だけ出すなら、こんな感じでいかがでしょう?
    • good
    • 0
この回答へのお礼

ありがとうございます。
decodeを使いたい項目が30以上あるので、
UNIONだとちょっと危ないかなと思ってますが、
大変参考になりました。
本当に感謝です。

お礼日時:2005/09/03 23:48

こんにちは。



DECODEを使用するということは、
いっかい→いっ1
かいだん→1だん

ではなく、

いっかい→1
かいだん→1
という置き換えですね?

DECODEは使ったことがなく、ざっとみた限りですが、
REPLACEで2回置き換えたらできるような気がします。
    • good
    • 1
この回答へのお礼

回答、ありがとうございます。
置き換えというよりは、検索なので、
上記の回答でうまくいきそうな感じがします。
でも、お答えしていただいたことに大変感謝しています。ありがとうございます。

お礼日時:2005/09/03 23:50

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!