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
如何避免出现
+
或 -
标志?
这里的问题是您尝试匹配的集合中值的顺序。
因为
-
位于另外两个字符之间 +-/
被解释为范围 (>= '+' 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
双括号字符内可以使用转义字符([ ]),包括转义脱字号 (^)、连字符 (-) 或右方括号 (])。