DOBON.NET DOBON.NETプログラミング掲示板過去ログ

SQLServer Like関数について

環境/言語:[SqlServer 2008]
分類:[その他]

皆さま、SqlServerのWhere句でLike関数を使用する場合について
ご教示願います。

SQL実行ロジック
SELECT distinct
Replace('札幌市中央区北4条' , A.tokenFrom , A.tokenTo ) as newAddress
FROM
addressReplace A(nolock)
WHERE
A.tokenFrom LIKE '%札幌市中央区北4条%'

■処理結果として
 0件になります。
 北4条→北四条にならないのが疑問です。
  

※addressReplaceテーブルには、
 データが登録されており、4条→四条 になって
 newAddressとして戻ってくる想定でおりました。

 tokenFrom には、数字+条 が1条〜50条まで登録
 tokenTo  には、漢字+条 が一条〜五十条まで登録 してます。

 単純なSQL関数の使用方法ミスなのか
 原因が分からず、悩んでおります。
 上記のSQLで4条が四条とReplaceされて結果戻ってくる為の
 アドバイス、ご教示願います。

 宜しくお願い致します。
■No28721に返信(はちまきさんの記事)

>A.tokenFrom LIKE '%札幌市中央区北4条%'
'札幌市中央区北4条' LIKE '%' + A.tokenFrom + '%'

ということですか?
>Replace('札幌市中央区北4条' , A.tokenFrom , A.tokenTo )
多分ここがおかしいんじゃないですかね。

MSDNによると
REPLACE ( string_expression , string_pattern , string_replacement )
string_expression
検索する文字列式を指定します。string_expression は文字またはバイナリ データ型で指定できます。
string_pattern
検索するサブストリングを指定します。string_pattern は文字またはバイナリ データ型で指定できます。string_pattern には空の文字列 ('') を指定できません。
string_replacement
置き換え後の文字列を指定します。string_replacement は文字またはバイナリ データ型で指定できます。

ということなので引数に集合が使えるかどうかはやった事ないので分かりませんが
もし仮にstring_patternに集合が使えたとしても
string_replacementに集合は使えないんじゃないでしょうか。
どの文字列に置換していいかが解釈できないと思います。

LIKEを疑うのであれば取り合えず以下のSQLで結果が戻るか確認してみては
SELECT distinct
*
FROM
addressReplace A(nolock)
WHERE
A.tokenFrom LIKE '%札幌市中央区北4条%'
shuさん uniさん

 ご教示、アドバイス有難う御座います。
 無事に解決致しました。
 '札幌市中央区北4条' LIKE '%' + A.tokenFrom + '%'
 で思うような結果が返ってきました。
 
 勉強になりました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板