DAOからADOに変換した際に、
SQL使用しているlike文のワイルドカード(*)が使用できないようで
取得できなくなってしまったので、
like '*ABC*'などをlike '%ABC%'と置換したいのですが、
自動生成部分もあり、できあがったSQL文を
正規表現で*を%に置換したいのですが、正規表現の文がわかりません。
わかる方がお見えになりましたらご教授お願いいたします。
置換したい例:
置換前
select * from tbl where fID like '*13*';
select * from tbl where fID like 'ID25*';
select * from tbl where fID like '*E';
select * from tbl where fID like '99999';
置換後
select * from tbl where fID like '%13%';
select * from tbl where fID like 'ID25%';
select * from tbl where fID like '%E';
select * from tbl where fID like '99999';
置換とはVisual Studioのエディタ機能の話でしょうか?
そうであれば、バージョンとか明記してもらわないと回答がつかないかも。
置換元文字列がどこにあって / どこから来て
置換先をどこに置く / どこへ送る
のか、まったく話が見えないので、回答のつけようがない、わけだ。
妄想するに シングルコーテーション文字で囲まれた * を % に置換したい
ってことだろうか?
単純にそうすると「米文字 * を検索したい」というときにまずい。
というわけで正規表現どうこうの前に案件整理が必要だろうな。
VC++ 2010を使用し、プログラム上で変換したいです。
(理由:SQL文がデータベースで管理されていたり、プログラムに組み込まれていたり。色々組み合わせているため、SQL文を容易に変更できないのと、変更したとのテスト(修正箇所の全パステスト)が膨大になるため)
LIKEにある*がネックになっていて、LIKEのあとの''で囲われた部分内の*をすべて%にしたいです。
既に書いたとおり
> 「米文字 * を検索したい」というときにまずい。
ので、
・検索文字列が * を含む場合にどんな SQL 文が生成されていて、
・その SQL 文のうち、どの * を % に置換すべきか
・その SQL 文のうち、どの * を % に置換してはならないか
その辺の分析無しにコード化することは不可能。
SQL 文を動的生成している時点できな臭いにおいが漂ってくるのだが、
現プログラムの SQL インジェクション脆弱性の検証をすべきだろうな。
脆弱性あり、ということになったら元プログラムを作り直す必要があるので
外からほげほげする、ってのは無しになりかねない。
元プログラムに脆弱性が無いとして
置換することで脆弱性を生み出す可能性も0ではないので
> テスト(修正箇所の全パステスト)が膨大になるため
テスト量は変わらないと思うぞ
質問に対しての回答では無くなってきている気がしますが・・・。
私ならですが正規表現だけだと難しいと思うので(というか詳しくない)
簡単なソフト作ってしまいますね。
シングルクォーテーション見つけたらフラグ立てて置き換え
必要なら"LIKE"も条件に入れればソコソコ変換できるかと。
もしくは"LIKE"でgrepかけて修正の方が実は早いかも。
最終的にはやっぱり手動で確認になりそうな気がします。
ツイート | ![]() |