0

私は多くの記事を読んでおり、部分文字列を見つけるには以下を使用する必要があることをスタックオーバーフローに含めています。

IF CHARINDEX('mywoRD', @words) > 0
BEGIN
    -- DO SOMETHING
END

私は次のことを試みていますが、うまくいかず、常に間違って返されます:

文字列 がある'Basketball & Soccer'とします。アンパサンドをチェックしてエンコードするスクリプトを作成しようとしています&'Basketball & Soccer'私の問題は、データベースに'Basketball & Soccer'.

したがって、スクリプトを実行すると、2 番目のスクリプトは次のようになります。

'Basketball & Soccer'

私はそれをきれいにするために次のことを試みています:

DECLARE @cleanparam as varchar(500)   

IF CHARINDEX('&',@myparameter) > 0 
BEGIN 
   -- if & is in the string skip and start with quotes
   SELECT @cleanparam = REPLACE(@myparameter,'"','"')   
END
ELSE
 BEGIN
      -- if not clean &'s and quotes and then continue with others
      SELECT @cleanparam = REPLACE(@myparameter,'&','&')   
      SELECT @cleanparam = REPLACE(@cleanparam,'"','"')   
 END

      SELECT @cleanparam = REPLACE(@cleanparam, '©', '©')
      SELECT @cleanparam = REPLACE(@cleanparam, '«', '«') 
       -- OTHERS HERE
4

2 に答える 2

1

スクリプトが何度も呼び出されるのを防ぐ方法がない場合は、スクリプトを拡張して、最初にエンコードされたシーケンスを値に変換し、次にシーケンスに戻す必要があります。このような:

  -- Convert back to symbols
  SELECT @cleanparam = REPLACE(@myparameter,'&','&')   
  SELECT @cleanparam = REPLACE(@cleanparam,'"','"')   
  etc...

  -- Convert symbols to escape sequences
  SELECT @cleanparam = REPLACE(@cleanparam,'&','&')   
  SELECT @cleanparam = REPLACE(@cleanparam,'"','"')   
  etc...
于 2014-02-06T03:56:29.773 に答える
1

これを試して

DECLARE @myparameter as varchar(500) 
set @myparameter = 'Basketball & Soccer & Volleyball'


DECLARE @cleanparam as varchar(500)
SELECT @cleanparam = REPLACE(@myparameter,'&amp;','&') --<----put some trick here :)
SELECT @cleanparam = REPLACE(@cleanparam,'&','&amp;')   
SELECT @cleanparam = REPLACE(@cleanparam,'"','&quot;') 
SELECT @cleanparam = REPLACE(@cleanparam, '©', '&copy;')
SELECT @cleanparam = REPLACE(@cleanparam, '«', '&laquo;') 

SELECT @cleanparam
于 2014-02-06T03:57:23.697 に答える