0

SQLクエリがあります。ユーザーが一重引用符で囲まれた関係演算子または値のみを変更できるようにしたい

私の入力文字列はです。

Select * from defect where Quantity < '9' and Date <= curdate() and Date >=
date_sub(curdate(), interval '3' month)

上記の文字列をそのまま一致させるために、以下のパターンを試しています。また、最初に^を、最後に$を試しました。しかし、どのような場合でも肯定的な結果はありません

1. Select * from defect where Quantity [<|(>)|(=)|(<=)|(>=)|(like)] '.*' and
Date [<|(>)|(=)|(<=)|(>=)|(!=)|(like)] curdate() and Date [<|(>)|(=)|(<=)|(>=)
|(!=)|(like)] date_sub(curdate(), interval '.*' month)

2. Select * from defect where Quantity (<|(>)|(=)|(<=)|(>=)|(like)) '.*' and
Date (<|(>)|(=)|(<=)|(>=)|(!=)|(like)) curdate() and Date (<|(>)|(=)|(<=)|(>=)
|(!=)|(like)) date_sub(curdate(), interval '.*' month)

更新パターンが入力文字列と一致しない理由についてのガイダンスが必要です。何が間違いでしょうか?

4

2 に答える 2

2

さらに問題があります:角かっこを誤って使用しています:

[<|(>)|(=)|(<=)|(>=)|(like)]

「次のうちの1文字:」を意味します<>()|=eikl

角かっこではなく括弧を使用し、適切にグループ化します。

([<>=]|[<>]=|like)

また、より具体的にする必要があります。'[^']*'の代わりに使用し'.*'ます。

最後に、リテラルの括弧と一致させたい場合は、正規表現でエスケープする必要があります。

date_sub\(curdate\(\), interval '[^']*' month\)
于 2012-09-22T16:21:18.450 に答える
1

私は解決策を見つけました

パターン1は、正規表現で特別な意味を持つため、「*」の前に円記号を付ける必要があっただけで問題ありませんでした。バックスラッシュはそれを通常の文字にします

Select \* from defect where Quantity [<|(>)|(=)|(<=)|(>=)|(like)] '.*' and
Date [<|(>)|(=)|(<=)|(>=)|(!=)|(like)] curdate() and Date [<|(>)|(=)|(<=)|(>=)
|(!=)|(like)] date_sub(curdate(), interval '.*' month)

簡単な質問でした。私はそのルールをすでに知っていましたが、数時間後にそれを整理することができました。

訂正角括弧[]を括弧に置き換え()、バックスラッシュを一定の括弧の前に置き\(\)

Select \* from defect where Quantity (<|(>)|(=)|(<=)|(>=)|(like)) '.*' and
Date (<|(>)|(=)|(<=)|(>=)|(!=)|(like)) curdate\(\) and Date (<|(>)|(=)|(<=)|(>=)
|(!=)|(like)) date_sub\(curdate\(\), interval '.*' month\)
于 2012-09-22T16:19:36.500 に答える