単語に文字列が存在するかどうかを調べて抽出しようとしています。私はinstr()
この関数を使用しましたが、これはLIKE関数として機能します。単語の一部または全体が存在する場合は、それを返します。
ここでは、文字列「Services」を取得したいのですが、「Services」を「Service」に変更しても機能します。私はそれを望んでいません。「サービス」が入力された場合、「サービス」ではなくnullを返す必要があります
変更:
ここで私がやろうとしているのは、会社名の特定の部分を省略したものです。
これは私のデータベーステーブルがどのように見えるかです:
Word | Abb
---------+-----
Company | com
Limited | ltd
Service | serv
Services | servs
コードは次のとおりです。
Declare
Cursor Words Is
SELECT word,abb
FROM abbWords
processingWord VARCHAR2(50);
abbreviatedName VARCHAR(120);
fullName = 'A.D Company Services Limited';
BEGIN
FOR eachWord IN Words LOOP
--find the position of the word in name
wordPosition := INSTR(fullName, eachWord.word);
--extracts the word form the full name that matches the database
processingWord := Substr(fullName,instr(fullName,eachWord.word), length(eachWord.word));
--only process words that exist in name
if wordPosition > 0 then
abbreviatedName = replace(fullName, eachWord.word,eachWord.abb);
end if;
END lOOP;
END;
したがって、ユーザーが「サービス」と入力した場合、「サービス」が返されることは望ましくありません。つまり、「サービス」という単語の位置を返す代わりに、「サービス」という単語が見つからない場合は、単語の位置を0にする必要があります。