如何转义加减号?

问题描述 投票:0回答:1
Declare @email varchar(max) = '+'
If @email LIKE '%[!#$%&''*+-/=?^_`{|}~]%'
PRINT @email

除了

+
-
符号之外,所有特殊字符都可以正常工作。

我尝试在

\
语句中的加号前添加
If
,但不起作用。

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

如果我在

\
Declare
语句中的加号之前添加
If
,那么它会打印
\+

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

如何避免出现

+
-
标志?

sql sql-server escaping special-characters
1个回答
1
投票

这里的问题是您尝试匹配的集合中值的顺序。

因为

-
位于另外两个字符之间
+-/
被解释为范围 (
>= '+' and <= '/'
)。

此范围与我的默认排序规则中的 5 个

varchar
字符匹配。
+
,
-
.
/

如果您使用的排序规则中

/
排序在
+
之前,则范围将不匹配任何内容。甚至不是
+
/

你不需要逃避任何事情。

只需将

-
作为您要尝试匹配的值集中的第一个字符,如示例中此处

符号 意义
喜欢“[a-cdf]” a、b、c、d 或 f
喜欢“[-acdf]” -、a、c、d 或 f

演示

WITH CHARS AS
(
SELECT TOP 255 CHAR(ROW_NUMBER() OVER (ORDER BY @@SPID)) AS C
FROM sys.all_columns
)
SELECT *
FROM CHARS
WHERE C LIKE '[-!#$%&''*+/=?^_`{|}~]'

如果您愿意,也可以

ESCAPE

双括号字符内可以使用转义字符([ ]),包括转义脱字号 (^)、连字符 (-) 或右方括号 (])。

© www.soinside.com 2019 - 2024. All rights reserved.