全角、半角、大文字、小文字問わず探すには?
- このフォーラムに新しいトピックを立てることはできません
- このフォーラムではゲスト投稿が禁止されています
nkmt
投稿数: 1668
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
SQL Serverのデータに
AbCd という値が入っているとします。
検索したい文字を ABCD と入力して、先程のデータも拾ってくる手法として
データを Zen(Upper で囲い、
検索したい文字も同様に Zen(Upperして
全角大文字化した物どうしで
Instrで探す手法を取る事が有ります。
(探せるけど速度的に難があるように思います。)
他の手法があったように思うのですが、よろしければ教えて下さい。
AbCd という値が入っているとします。
検索したい文字を ABCD と入力して、先程のデータも拾ってくる手法として
データを Zen(Upper で囲い、
検索したい文字も同様に Zen(Upperして
全角大文字化した物どうしで
Instrで探す手法を取る事が有ります。
(探せるけど速度的に難があるように思います。)
他の手法があったように思うのですが、よろしければ教えて下さい。
投票数:0
平均点:0.00
TKitabayashi
投稿数: 90
![一人前 一人前](../../uploads/rank3dbf8ea81e642.gif)
SQL Where句のDB SQLで、likeを使うとうまくいくと思います。
DB SQLに、「(検索する列名) like '%ABCD%'」を記述します。
ただし、SQL Serverの照合順序をデフォルト(Japanese_CI_AS)から変更していないことが条件です。
DB SQLに、「(検索する列名) like '%ABCD%'」を記述します。
ただし、SQL Serverの照合順序をデフォルト(Japanese_CI_AS)から変更していないことが条件です。
投票数:0
平均点:0.00
nkmt
投稿数: 1668
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
Kitabayashi様、レスありがとうございます。
その記述で半角、全角、大文字、小文字問わず検索出来るんですね。
ありがとうございます。
知りませんでした。
しかしJapanese_90bin2 に変えているので、使えないかもしれないですね。
試してみます。
Japanese_90bin2 に変えている理由は確か、カナとかアルファベット順に並べた時の為だったと思うのですが、うる覚えでいつもそうやってます。
PS. CI_AS のデータベースを作成してみました。
文字1項目だけのテーブルを作成しました。
AbCd と入力後、次の行に
ABCD を入力すると、インデックス重複になりました。
なんとなく理屈が判りました。
-----
Magic SQLではなくて
DB SQL の所に記述した所、CI_ASのデータに対しては教えて頂いた機能で成功しました。
ありがとうございます。
その記述で半角、全角、大文字、小文字問わず検索出来るんですね。
ありがとうございます。
知りませんでした。
しかしJapanese_90bin2 に変えているので、使えないかもしれないですね。
試してみます。
Japanese_90bin2 に変えている理由は確か、カナとかアルファベット順に並べた時の為だったと思うのですが、うる覚えでいつもそうやってます。
PS. CI_AS のデータベースを作成してみました。
文字1項目だけのテーブルを作成しました。
AbCd と入力後、次の行に
ABCD を入力すると、インデックス重複になりました。
なんとなく理屈が判りました。
-----
Magic SQLではなくて
DB SQL の所に記述した所、CI_ASのデータに対しては教えて頂いた機能で成功しました。
ありがとうございます。
投票数:0
平均点:0.00
Kurogane
投稿数: 50
![常連 常連](../../uploads/rank3dbf8e9e7d88d.gif)
nkmtさん、こんにちは。
絞り込み時に照合順序を指定してはいかがでしょう。
これなら元の症状順序が何であれ有効かと。
[対象カラム] collate JAPANESE_CI_AS like "%ABCD%"
絞り込み時に照合順序を指定してはいかがでしょう。
これなら元の症状順序が何であれ有効かと。
[対象カラム] collate JAPANESE_CI_AS like "%ABCD%"
投票数:1
平均点:10.00
nkmt
投稿数: 1668
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
Kurogame様、レスありがとうございます。
教えて頂いた方法で検索にひっかかりました。
成功だと思います。
DBは、Japanese_90BIN2なので、その項目が重複可項目であっても
AbCd
ABCD
abcd といった混在も入力出来ますし、
ABCDのキーワードで検索出来るし、凄い便利ですね。
最初にレス頂いたKitabayashi様、そしてKurogane様 有難うございました。
感謝申し上げます。
いくつか改善していけそうです。
DBの照合順序が、Japanese_CI_AS で困りそうな点は
重複不可項目に abcd と ABCD といった
大文字 小文字 半角 全角 の区別が出来ない点なのでしょうね。
それはメリットの場合も有るでしょうし。
PS. 10万件の商品マスタから探してくるといった処理が10秒かかっていたものが3秒で済むようになりそうな感じです。結合リンクなども行っています。
教えて頂いた方法で検索にひっかかりました。
成功だと思います。
DBは、Japanese_90BIN2なので、その項目が重複可項目であっても
AbCd
ABCD
abcd といった混在も入力出来ますし、
ABCDのキーワードで検索出来るし、凄い便利ですね。
最初にレス頂いたKitabayashi様、そしてKurogane様 有難うございました。
感謝申し上げます。
いくつか改善していけそうです。
DBの照合順序が、Japanese_CI_AS で困りそうな点は
重複不可項目に abcd と ABCD といった
大文字 小文字 半角 全角 の区別が出来ない点なのでしょうね。
それはメリットの場合も有るでしょうし。
PS. 10万件の商品マスタから探してくるといった処理が10秒かかっていたものが3秒で済むようになりそうな感じです。結合リンクなども行っています。
投票数:0
平均点:0.00
nkmt
投稿数: 1668
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
項目Aか項目Bか項目Cに ABCD を含んでいる分を探す時に
先程のLIKE文をDB SQLに3つ書いているのですが、もっとシンプルな記述はございますか?
先程のLIKE文をDB SQLに3つ書いているのですが、もっとシンプルな記述はございますか?
投票数:0
平均点:0.00
Kawahara
投稿数: 55
![常連 常連](../../uploads/rank3dbf8e9e7d88d.gif)
nkmtさん。
SQLでは、やったことがないですが、
trim(項目A)&' '&trim(項目B)&' '&trim(項目C) like %ABCD%
でどんなでしょうか。
>項目Aか項目Bか項目Cに ABCD を含んでいる分を探す時に
>先程のLIKE分をDB SQLに3つ書いているのですが、もっとシンプ
>ルな記述はございますか?
SQLでは、やったことがないですが、
trim(項目A)&' '&trim(項目B)&' '&trim(項目C) like %ABCD%
でどんなでしょうか。
>項目Aか項目Bか項目Cに ABCD を含んでいる分を探す時に
>先程のLIKE分をDB SQLに3つ書いているのですが、もっとシンプ
>ルな記述はございますか?
--
尾道のケンさん
投票数:0
平均点:0.00
nkmt
投稿数: 1668
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
尾道のケンさん、レスありがとうございます。
:A & :B LIKE ・・・ は実行時に
「char と char は & 演算子では互換性がありません」
というエラーになりました。
SQLに詳しい人に聞いてみたら コンキャット を勧められました。
CONCAT(:A,:B) collate JAPANESE_CI_AS like '%ABCD%'
これで大丈夫でした。以下でも大丈夫でした。
:A + :B collate JAPANESE_CI_AS like '%ABCD%'
(SQL 詳しくなくいので皆さんありがとうございます。)
:A & :B LIKE ・・・ は実行時に
「char と char は & 演算子では互換性がありません」
というエラーになりました。
SQLに詳しい人に聞いてみたら コンキャット を勧められました。
CONCAT(:A,:B) collate JAPANESE_CI_AS like '%ABCD%'
これで大丈夫でした。以下でも大丈夫でした。
:A + :B collate JAPANESE_CI_AS like '%ABCD%'
(SQL 詳しくなくいので皆さんありがとうございます。)
投票数:0
平均点:0.00
Tanda
投稿数: 2151
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
nkmtさん、
Like 関数を「&」とか「or」で繋げたい場合は、それぞれ
独立したセンテンスを「&」や「or」で繋げるといいと思います。
Like 関数を「&」とか「or」で繋げたい場合は、それぞれ
独立したセンテンスを「&」や「or」で繋げるといいと思います。
投票数:1
平均点:10.00
nkmt
投稿数: 1668
![長老 長老](../../uploads/rank3dbf8eb1a72e7.gif)
以前回答をくださいましたkitabayashi様、Kurogane様、Kawahara様、Tanda様
改めてお礼申し上げます。教えてください。
DB SQLに記述する際
:AA+:AB COLLATE JAPANESE_CI_AS LIKE :F OR :F='' のように記述しております。
変数 F が未入力の場合、このSQL文が無駄なんて事はないのでしょうか?
改めてお礼申し上げます。教えてください。
DB SQLに記述する際
:AA+:AB COLLATE JAPANESE_CI_AS LIKE :F OR :F='' のように記述しております。
変数 F が未入力の場合、このSQL文が無駄なんて事はないのでしょうか?
投票数:0
平均点:0.00