これには手短かですか?
anyまたはnullに一致するワイルドカードはありますか?
もう1つは、0または1にマッチすることです。1文字または0文字に一致するワイルドカード
select [id], [word] from [FTSwordDef]
where [word] like 'system_'
or [word] like 'system'
これには手短かですか?
anyまたはnullに一致するワイルドカードはありますか?
もう1つは、0または1にマッチすることです。1文字または0文字に一致するワイルドカード
select [id], [word] from [FTSwordDef]
where [word] like 'system_'
or [word] like 'system'
はい、短い方法があるが、(そのようにすでにある場合を除く)、それはおそらくsargable非クエリになるだろう:
WHERE word + ' ' LIKE 'system_'
LIKE
の左側に余分なスペースがあるので、それは動作します無視されますが、余分でない場合、つまり右側の引数の長さ内にある場合は、他の文字と同様にパターン文字列の一致に関与します。
したがって、例えば、以下のすべてがtrue
をもたらす:
(1) 'system ' LIKE 'system_'
(2) 'systemA' LIKE 'system_'
(3) 'systemA ' LIKE 'system_'
(1)において、空間は、パターン文字列の_
と一致します。 (2)では、と一致するのはA
です。 (3)
では、それはまた、スペースを無視してA
です。
これを説明するための素敵なデモがあります:http://sqlfiddle.com/#!3/d41d8/9521
いいえ。
http://msdn.microsoft.com/en-us/library/ms179859.aspx
%文字はしないだろう場合は、ORをする必要があります。それは句の余分な部分ですので、それはあまりクリーンではありませんが、最初にLIKEを使用すると、とにかく効率が悪くなります。経験則が重要であるならば、経験則は可能ならLIKEを避けてください。
ひどく非効率で、私はAndriy's answerが好きですが、ワイルドカードを使用して長さを比較することもできます。
select [id], [word] from [FTSwordDef]
where [word] like 'system%'
and LEN([word]) <= LEN('system%')
OKは正しい答えを返します。しかし、 'system_'や 'word'のような[system]のような[word] – Paparazzi
私はそれを試してみましょう。 – Paparazzi
問題を手にして私は実際にこれを使用することはできませんが、それは記載された質問に対する答えです。 – Paparazzi