6

変数の値の前に角かっこ「[」が付いていることを確認して、T-SQL変数名をエラートラップしようとしています。

これが私がこれを行おうとしている方法の例です:

DECLARE @thing nvarchar(20)
SET @thing = '[55555'
IF(@thing NOT LIKE '[' + '%') --If the value does not start with [ then add it
BEGIN
SET @thing = '[' + @thing
END
PRINT @thing

上記の例はPRINTの[[55555

@thingの元の値の前に、角かっこ「[」が付いていることに注意してください。以来、IF条件がfalseを返すことを期待していました"[55555" is LIKE '[' + '%'

IF条件がfalseを返さないのはなぜですか?そして、もっと重要なことに、可変文字列値の先頭にある文字列の存在をチェックするための正しい構文は何でしょうか?

編集 ブラケット「[」には何か特別なものがあるように見えます。ブラケットでLIKEを実行すると、期待どおりに動作しませんが、ブラケットを使用しない場合、LIKEは期待どおりに機能します。

これらの例を確認してください。

IF('[' NOT LIKE '[')
BEGIN
PRINT '[ is NOT LIKE ['
END
ELSE
BEGIN
PRINT '[ is LIKE ['
END

IF('StackO' NOT LIKE 'StackO')
BEGIN
PRINT 'STACKO is NOT LIKE StackO'
END
ELSE
BEGIN
PRINT 'STACKO is LIKE StackO'
END

2つの条件の出力は次のとおりです。

[は好きではありません[

STACKOはStackOのようなものです

4

4 に答える 4

5

ここで定義されているように、「[」は実際にはLIKE演算子構文の一部であるためだと思います:http://msdn.microsoft.com/en-us/library/ms179859.aspx

[をエスケープするには、次のようにエスケープ文字を定義する必要があります。

DECLARE @thing nvarchar(20)
SET @thing = '[55555'
IF(@thing NOT LIKE '\[%' ESCAPE '\' )
BEGIN
SET @thing = '[' + @thing
END
PRINT @thing

別の解決策は次のとおりです。

DECLARE @thing nvarchar(20)
SET @thing = '[55555'
IF(LEFT(@thing,1) <> '[') --If the value does not start with [ then add it
BEGIN
SET @thing = '[' + @thing
END
PRINT @thing
于 2011-07-22T23:48:07.103 に答える
2

動作させるには、チェックを次のように変更します

IF (SUBSTRING(@thing, 1,1) != '[')

likeが機能しない理由は、[がlikeの特殊文字であるためです。%と同じように。こちらをご覧ください

于 2011-07-22T23:47:55.093 に答える
2

角かっこ文字([および]は、T-SQLの特殊なワイルドカード文字です。これらのリテラル文字を検索するには、それらの文字をエスケープする必要があります(ワイルドカードとして使用するのではなく、これらのリテラル文字を検索することを示します)。ESCAPE次のように、これを行うために使用します。

DECLARE @thing nvarchar(20)
SET @thing = '[55555'
-- pick an escape character you won't see in your content
IF(@thing NOT LIKE '![' + '%' ESCAPE '!')
BEGIN
  SET @thing = '[' + @thing
END
PRINT @thing

これは印刷し[55555ます。

MSDNから:

1つ以上の特殊ワイルドカード文字を含む文字列を検索できます...パーセント記号をワイルドカード文字ではなく文字として検索するには、ESCAPEキーワードとエスケープ文字を指定する必要があります。たとえば、サンプルデータベースにcommentは、テキストを含むという名前の列が含まれています30%30%列のどこかに文字列を含む行を検索するには、 。commentなどのWHERE句を指定しますWHERE comment LIKE '%30!%%' ESCAPE '!'

于 2011-07-22T23:55:47.750 に答える
0

特殊文字(角かっこ、一重引用符など)をエスケープする必要があります。この場合、これを行うことができます:

LIKE '[['

編集:

PS-[は、次のようにワイルドカードに使用できるため、特殊文字ですLIKE '[0-9]'。パターンマッチングを実行します。(この場合、一致は正規表現のようなものです。0から9までの任意の数字です。

于 2011-07-22T23:59:32.413 に答える