来源:https://blog.guoqianfan.com/2019/01/27/how-to-use-like-and-patindex-in-sqlserver/
在SQL Server中,能使用通配符的只有2个:LIKE、PATINDEX。
不过LIKE支持2种通配符转义,无限制最全面;而PATINDEX只支持最简单的通配符转义(转义),限制较多。
LIKE 是逻辑运算符,能使用通配符,并且支持2种方法来转义通配符。
代表是可选的,所以可以没有转义表达式。
- match_expression
任何有效的字符数据类型的表达式。
- pattern
要在 match_expression 中搜索并且可以包括下列有效通配符的特定字符串。 pattern 的最大长度可达 8,000 字节。
- :包含零个或多个字符的任意字符串。
- (下划线):任何单个字符。
- :指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。数字同样支持范围或集合([0-9]或[0])。
在范围搜索中,范围包含的字符可能因排序规则的排序规则而异。
- :不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。数字同样支持。
- escape_character
放在通配符之前用于指示通配符应当解释为常规字符而不是通配符的字符。 escape_character 是字符表达式,无默认值,并且计算结果必须仅为一个字符。
Boolean
如果 match_expression 与指定的 pattern 相匹配,则 LIKE 返回 TRUE。
- pattern里有空格时必须匹配!
- pattern里无空格时会忽略match_expression的零个或多个尾随空格。
- 此时应该注意、类型,因为不足长度时会自动添加尾随空格,有可能出现问题。
测试sql如下:
相等
=
不相等
!=
- :结果可以是:da、tm...
- :会排除掉所有以 d 开始或第二个字母为 m 的名称。
这是因为用反向通配符匹配字符串是分步骤进行计算的,一次一个通配符。如果在计算过程中任一环节匹配失败,那么就会将其消除。
通配符当做普通字符来使用,有2种方式。
使用
这种方式只适合简单的情况,有很多限制,不推荐。
能转义的字符有:百分号 (%)、下划线 (_) 和左括号 ([) ,其他的转义不了,或者只能特殊情况下使用(例如短横线只有在首位时才被视为普通字符)。如果强行使用来转义会导致结果错误!!推荐使用子句来进行转义。
使用子句
子句本来就是为转义而生,推荐使用。
子句的转义字符是自定义的,定义为某字符,pattern里就使用这个转义字符来转义即可。
相关sql如下:
PATINDEX 属于字符串函数,支持通配符,转义通配符只能使用,所以限制颇多。
PATINDEX 返回模式在指定表达式中第一次出现的起始位置(从1开始);如果在所有有效的文本和字符数据类型中都找不到该模式,则返回零。
- pattern
包含要查找的序列的字符表达式(和的pattern参数一样)。可以使用通配符;但 pattern 之前和之后必须有 % 字符(搜索第一个或最后一个字符时除外)。 pattern 是字符串数据类型类别的表达式。 pattern 最多包含 8000 个字符。
- expression
是一个表达式,通常是针对指定模式搜索的列。 expression 属于字符串数据类型类别。
如果 expression 的数据类型为 varchar(max) 或 nvarchar(max),则返回 bigint;否则返回 int。
返回模式在指定表达式中第一次出现的起始位置(从1开始);如果在所有有效的文本和字符数据类型中都找不到该模式,则返回零。
- 如果 pattern 或 expression 为 NULL,则 PATINDEX 返回 NULL。
- PATINDEX虽然支持通配符,但是转义通配符只能使用!所以限制颇多。
- 在 PATINDEX 中可以使用 函数显式指定要搜索的表达式的排序规则。示例sql如下:
- LIKE (Transact-SQL):https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2012/ms(v%3Dsql.110)
- PATINDEX (Transact-SQL):https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2012/ms(v%3Dsql.110)
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/5624.html