- - PR -
ストアドプロシージャでのLIKE句
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-10-16 19:29
お世話になります。
現在、以下@のようなストアドプロシージャを作成し、実行したのですがAのようなエラーとなってしまいました。 しかし、「SET @statement」に続くLIKE句の指定方法をBのように変更すると正常に実行されます。 何故LIKE句で指定する値の前後にシングルコーテーションが2つづつ必要なのか分かりません。 どなたかご存知の方はアドバイスをお願い致します。 @ストアドプロシージャ DECLARE @statement nvarchar(300) SET @statement = 'SELECT * FROM ビュー名 A' + ' WHERE A.フィールド名'+' LIKE 31%' EXECUTE sp_executesql @statement AエラーMSG 行 2: '%' の近くに無効な構文があります。 該当する行はありません。 (0 行が返されました) @RETURN_VALUE = 0 [dbo].[CO_S_0001] の実行が完了しました。 B変更内容 ' LIKE 31%'の部分を 'LIKE ''31%''' とすると正常に実行される | ||||
|
投稿日時: 2007-10-16 20:18
質問する場合は、RDBMS名、バージョンを明記してください。
構文から推測すると、RDBMSは、SQL Serverですね? ' WHERE A.フィールド名'+' LIKE 31%'では、文字結合した結果の文字列は、 「WHERE A.フィールド名 LIKE 31%」になります。 LIKEのパターン文字列は、「'」で囲む必要があるので、これでは構文エラーになって 当然です。 「'LIKE ''31%''」とすることにより、文字連結の結果を「LIKE '31%'」とすることができ、 SQLの構文としても正しくなります。 | ||||
|
投稿日時: 2007-10-17 11:50
忠犬さん、ご回答ありがとうございます。
また御察しの通り、RDBMSはSQL Server 2000(SP3a)となります。 忠犬さんのおかげで、 LIKEで指定する場合には、LIKE '31%'とする。 それ自体が文字列の中にある場合には、'LIKE ''31%'''とするというのが分かりました。 今悩んでいるのは'31%'の中の31を変数で受け渡し、結果として'31%'としたい事です。 具体的には、下記のように記述していますが@のケースだと失敗でAでも構文エラーとなります。変数の中に「'」のみを追加するにはどうしたら良いのでしょうか? どなたかご教授お願いします。 DECLARE @Field1 nvarchar(300) DECLARE @SQL nvarchar(300) DECLARE @AAA nvarchar(300) SET @Field1 = '31' @-------------------------- SET @AAA = @Field1 + '%' SET @SQL = 'LIKE ' + @AAA ---------------------------- → LIKE 31% となる A-------------------------- SET @AAA = ''' + @Field1 + '%''' ・・・31%の前後に「'」と「'」を付けたい SET @SQL = 'LIKE ' + @AAA ---------------------------- → 構文エラーとなる | ||||
|
投稿日時: 2007-10-17 13:08
「'」が1コ足りなくないですか? SET @AAA = '''' + @Field1 + '%''' | ||||
|
投稿日時: 2007-10-17 15:13
かめたろさん、ご回答ありがとうございます。
引用--------------------------------- 「'」が1コ足りなくないですか? SET @AAA = '''' + @Field1 + '%''' ------------------------------------- 「'」が足りないということですが、 「SET @AAA = '''' + @Field1 + '%'''」と記述すれば文字列として「'31%'」になるという事でしょうか? | ||||
|
投稿日時: 2007-10-17 16:51
あれ、分かりにくい書き方しちゃいましたかね。
結果 LIKE '31%' ドコまでがリテラル文字列になるのか意識してみてはいかがでしょうか。 クエリアナライザやマネジメントスタジオを使っているのであれば、リテラルは赤字になりますよね。 | ||||
|
投稿日時: 2007-10-17 18:04
かめたろさん、ありがとうございます!
おかげでLIKE '31%'が取得できました! どうもこういった記述が不得意で悩んでしまいます。 ご丁寧なアドバイス、ありがとうございました。 |
1