sql-server – 要为LIKE运算符通配符搜索转义的T-SQL特殊字符

前端之家收集整理的这篇文章主要介绍了sql-server – 要为LIKE运算符通配符搜索转义的T-SQL特殊字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
sql Server具有LIKE运算符来处理通配搜索.我的客户希望在应用程序的用户界面中使用“*”(星号)字符作为通配符.我只是想知道是否有任何标准字符我需要担心(在sql Server中用作特殊字符)除了“%”(百分比)字符本身之前执行LIKE威尔卡搜索以防其关键字包含“%”并且需要在实际字符串中找到“%”.如果是这样,他们是什么?

所以请假设[table1].[column1]在文本字符串中永远不会有“*”(星号)!

这是我到目前为止所拥有的.我是否需要处理除标准“%”字符和自定义“*”之外的更多情况

  1. -- custom replacement
  2. select REPLACE('xxx*xxx','*','%')
  3.  
  4. -- standard replacements
  5. select REPLACE('xxx%xxx','%','[%]')
  6. select REPLACE('xxx_xxx','_','[_]') -- ???
  7. select REPLACE('xxx[xxx','[','[[]') -- ???
  8. select REPLACE('xxx]xxx',']','[]]') -- ???

例:

  1. SET @p = REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(@p,'[]]'),'[[]'),'[_]'),'[%]'),'%')
  2.  
  3. SELECT 'xxxxxxxxx%xxxxxx' LIKE @p
  4.  
  5. SELECT [table1].[column1] LIKE @p

解决方法

看起来你得到了所有这些,虽然我认为逃避’]’是不必要的.从技术上讲,你应该只需要逃离开口括号(‘[‘).
  1. DECLARE @Table1 TABLE
  2. (
  3. Column1 VARCHAR(32) NOT NULL PRIMARY KEY
  4. );
  5.  
  6. INSERT @Table1(Column1)
  7. VALUES
  8. ('abc%def'),('abc_def'),('abc[d]ef'),('abc def'),('abcdef');
  9.  
  10. DECLARE @p VARCHAR(32) = 'abc*]*';
  11.  
  12. DECLARE @Escaped VARCHAR(64) = REPLACE(@p,'[[]');
  13. SET @Escaped = REPLACE(@Escaped,'[_]');
  14. SET @Escaped = REPLACE(@Escaped,'[%]');
  15. SET @Escaped = REPLACE(@Escaped,'%');
  16.  
  17. SELECT T.Column1
  18. FROM @Table1 T
  19. WHERE T.Column1 LIKE @Escaped;

猜你在找的MsSQL相关文章