You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL LIKE语句中转义加号(+)与减号(-)?

SQL LIKE 匹配加号(+)和减号(-)的正确方法

先看你遇到的核心问题:
执行这段SQL时:

Declare @email varchar(max) = '+'
If @email LIKE '%[!#$%&''*+-/=?^_`{|}~]%'
PRINT @email

加号(+)和减号(-)无法被正常匹配——因为在LIKE的字符类[]中,减号如果夹在两个字符之间,会被当作范围运算符(比如a-z表示从a到z的所有字符)。你写的*+-/会被SQL解析为「从*到/的字符范围」,而非单独的*、+、-、/,所以加号不在这个范围内,自然匹配失败。

另外,SQL Server的LIKE运算符不支持用\转义字符,所以你之前的转义操作完全无效。

正确处理方式

要让减号(-)作为普通字符被匹配,有两种可靠方法:

  1. 把减号放在字符类的开头或结尾
    这样SQL不会将其识别为范围运算符,加号本身无需转义,直接放入字符类即可:

    Declare @email varchar(max) = '+'
    If @email LIKE '%[-!#$%&''*/=?^_`{|}~+]%'
    PRINT @email
    
  2. 用方括号单独包裹减号
    在字符类内部,用[-]表示普通的减号字符:

    Declare @email varchar(max) = '-'
    If @email LIKE '%[!#$%&''*+[-]/=?^_`{|}~]%'
    PRINT @email
    

验证示例

测试加号匹配:

Declare @email varchar(max) = '+'
If @email LIKE '%[-!#$%&''*/=?^_`{|}~+]%'
PRINT @email -- 正常输出"+"

测试减号匹配:

Declare @email varchar(max) = '-'
If @email LIKE '%[-!#$%&''*/=?^_`{|}~+]%'
PRINT @email -- 正常输出"-"

内容的提问来源于stack exchange,提问作者user8314628

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 07:33:19