ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

全角、半角、大文字、小文字問わず探すには?

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 .5 .6 | 投稿日時 2016-1-11 23:32
nkmt  長老   投稿数: 1668
SQL Serverのデータに
AbCd という値が入っているとします。

検索したい文字を ABCD と入力して、先程のデータも拾ってくる手法として

データを Zen(Upper で囲い、
検索したい文字も同様に Zen(Upperして
全角大文字化した物どうしで
Instrで探す手法を取る事が有ります。

(探せるけど速度的に難があるように思います。)

他の手法があったように思うのですが、よろしければ教えて下さい。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-1-12 9:35
TKitabayashi  一人前   投稿数: 90
SQL Where句のDB SQLで、likeを使うとうまくいくと思います。

DB SQLに、「(検索する列名) like '%ABCD%'」を記述します。

ただし、SQL Serverの照合順序をデフォルト(Japanese_CI_AS)から変更していないことが条件です。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-1-12 9:41 | 最終変更
nkmt  長老   投稿数: 1668
Kitabayashi様、レスありがとうございます。
その記述で半角、全角、大文字、小文字問わず検索出来るんですね。
ありがとうございます。
知りませんでした。

しかしJapanese_90bin2 に変えているので、使えないかもしれないですね。
試してみます。

Japanese_90bin2 に変えている理由は確か、カナとかアルファベット順に並べた時の為だったと思うのですが、うる覚えでいつもそうやってます。

PS. CI_AS のデータベースを作成してみました。
文字1項目だけのテーブルを作成しました。
AbCd と入力後、次の行に
ABCD を入力すると、インデックス重複になりました。
なんとなく理屈が判りました。

-----
Magic SQLではなくて
DB SQL の所に記述した所、CI_ASのデータに対しては教えて頂いた機能で成功しました。
ありがとうございます。

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-1-12 10:50
Kurogane  常連   投稿数: 50
nkmtさん、こんにちは。

絞り込み時に照合順序を指定してはいかがでしょう。
これなら元の症状順序が何であれ有効かと。

[対象カラム] collate JAPANESE_CI_AS like "%ABCD%"
投票数:1 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-1-12 11:17 | 最終変更
nkmt  長老   投稿数: 1668
Kurogame様、レスありがとうございます。
教えて頂いた方法で検索にひっかかりました。
成功だと思います。

DBは、Japanese_90BIN2なので、その項目が重複可項目であっても
AbCd
ABCD
abcd といった混在も入力出来ますし、
ABCDのキーワードで検索出来るし、凄い便利ですね。

最初にレス頂いたKitabayashi様、そしてKurogane様 有難うございました。
感謝申し上げます。
いくつか改善していけそうです。

DBの照合順序が、Japanese_CI_AS で困りそうな点は
重複不可項目に abcd と ABCD といった
大文字 小文字 半角 全角 の区別が出来ない点なのでしょうね。
それはメリットの場合も有るでしょうし。

PS. 10万件の商品マスタから探してくるといった処理が10秒かかっていたものが3秒で済むようになりそうな感じです。結合リンクなども行っています。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-1-12 12:46 | 最終変更
nkmt  長老   投稿数: 1668
項目Aか項目Bか項目Cに ABCD を含んでいる分を探す時に
先程のLIKE文をDB SQLに3つ書いているのですが、もっとシンプルな記述はございますか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-1-12 13:26
Kawahara  常連   投稿数: 55
nkmtさん。

SQLでは、やったことがないですが、

trim(項目A)&' '&trim(項目B)&' '&trim(項目C) like %ABCD%
でどんなでしょうか。


>項目Aか項目Bか項目Cに ABCD を含んでいる分を探す時に
>先程のLIKE分をDB SQLに3つ書いているのですが、もっとシンプ
>ルな記述はございますか?

--
尾道のケンさん

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2016-1-12 13:59 | 最終変更
nkmt  長老   投稿数: 1668
尾道のケンさん、レスありがとうございます。

: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
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2016-1-16 13:24
Tanda  長老   投稿数: 2151
nkmtさん、

Like 関数を「&」とか「or」で繋げたい場合は、それぞれ
独立したセンテンスを「&」や「or」で繋げるといいと思います。
投票数:1 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2017-5-25 11:08
nkmt  長老   投稿数: 1668
以前回答をくださいましたkitabayashi様、Kurogane様、Kawahara様、Tanda様
改めてお礼申し上げます。教えてください。

DB SQLに記述する際

:AA+:AB COLLATE JAPANESE_CI_AS LIKE :F OR :F='' のように記述しております。

変数 F が未入力の場合、このSQL文が無駄なんて事はないのでしょうか?
投票数:0 平均点:0.00

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約