在SQL结构化查询语言中,LIKE语句有着至关重要的作用。
LIKE语句的语法格式是:select * from 表名 where 字段名 like 对应值(子串),它主要是针对字符型字段的,它的作用是在一个字符型字段列中检索包含对应子串的。
假设有一个数据库中有个表table1,在table1中有两个字段,分别是name和sex二者全是字符型数据。现在我们要在姓名字段中查询以“张”字开头的记录,语句如下:
select * from table1 where name like "张*"
如果要查询以“张”结尾的记录,则语句如下:
select * from table1 where name like "*张"
这里用到了通配符“*”,可以说,like语句是和通配符分不开的。下面我们就详细介绍一下通配符。
匹配类型
模式
举例 及 代表值
说明
多个字符
*
c*c代表cc,cBc,cbc,cabdfec等
它同于DOS命令中的通配符,代表多个字符。
多个字符
%
%c%代表agdcagd等
这种方法在很多程序中要用到,主要是查询包含子串的。
特殊字符
[*]
a[*]a代表a*a
代替*
单字符
?
b?b代表brb,bFb等
同于DOS命令中的?通配符,代表单个字符
单数字
#
k#k代表k1k,k8k,k0k
大致同上,不同的是代只能代表单个数字。
字符范围
- [a-z]代表a到z的26个字母中任意一个 指定一个范围中任意一个
续上
排除 [!字符] [!a-z]代表9,0,%,*等 它只代表单个字符
数字排除 [!数字] [!0-9]代表A,b,C,d等 同上
组合类型 字符[范围类型]字符 cc[!a-d]#代表ccF#等 可以和其它几种方式组合使用
假设表table1中有以下记录:
name sex
张小明 男
李明天 男
李a天 女
王5五 男
王清五 男
下面我们来举例说明一下:
例1,查询name字段中包含有“明”字的。
select * from table1 where name like '%明%'
例2,查询name字段中以“李”字开头。
select * from table1 where name like '李*'
例3,查询name字段中含有数字的。
select * from table1 where name like '%[0-9]%'
例4,查询name字段中含有小写字母的。
select * from table1 where name like '%[a-z]%'
例5,查询name字段中不含有数字的。
select * from table1 where name like '%[!0-9]%'
以上例子能列出什么值来显而易见。但在这里,我们着重要说明的是通配符“*”与“%”的区别。
很多朋友会问,为什么我在以上查询时有个别的表示所有字符的时候用"%"而不用“*”?先看看下面的例子能分别出现什么结果:
select * from table1 where name like *明*
select * from table1 where name like %明%
大家会看到,前一条语句列出来的是所有的记录,而后一条记录列出来的是name字段中含有“明”的记录,
所以说,当我们作字符型字段包含一个子串的查询时最好采用“%”而不用“*”,用“*”的时候只在开头或者只在结尾时,而不能两端全由“*”代替任意字符的情况下。
========语法==========
LIKE
确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字
符串的任意片段匹配通配符。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 LIKE
运算符更加灵活。如果任何参数都不属于字符串数据类型,Microsoft® SQL Server™
会将其转换成字符串数据类型(如果可能)。
语法
match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]
参数
match_expression 任何字符串数据类型的有效 SQL Server 表达式。
patternmatch_expression 中的搜索模式,可以包含下列有效 SQL Server 通配符
1 % 包含零个或更多字符的任意字符串
示例:WHERE title LIKE '%computer% ' 将查找处于书名任意位置的包含单词 computer 的所有书名。
2 _(下划线) 任何单个字符
示例:WHERE au_fname LIKE '_ean ' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。
3 [] 指定范围中的任何单个字符
示例:WHERE au_lname LIKE '[C-P]arsen ' 将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的 作者姓氏,例如,Carsen、Larsen、Karsen 等
4 [^] 不属于指定范围中的任何单个字符,与 [] 相反
示例:WHERE au_lname LIKE 'de[^l]% ' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。
一 使用 like 的模式匹配:
在搜索Datetime类型时,建议使用like .
LIKE 支持 ASCII 模式匹配和 Unicode 模式匹配。当所有参数,包括
match_expression、pattern 和 escape_character(如果有)都是 ASCII
字符数据类型时,将执行 ASCII 模式匹配。如果其中任何参数属于 Unicode 数据类型,则所有参数将被转换为
Unicode 并执行 Unicode 模式匹配。当对 Unicode 数据(nchar 或 nvarchar
数据类型)使用 LIKE 时,尾随空格是有意义的。但是对于非 Unicode 数据,尾随空格没有意义。Unicode
LIKE 与 SQL-92 标准兼容。ASCII LIKE 与 SQL Server 的早期版本兼容
二 使用 % 通配符
例如,此查询将显示数据库中所有的系统表,因为它们都以字母 sys 开始:
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME LIKE 'sys% '
若要查阅非系统表的所有对象,请使用 NOT LIKE 'sys% '。如果共有 32 个对象且 LIKE 找到
13 个与模式匹配的名称,则 NOT LIKE 将找到 19 个与 LIKE 模式不匹配的对象
三 使用escape字句的模式匹配
可搜索包含一个或多个特殊通配符的字符串。例如,customers 数据库中的 discounts 表可能存储含百分号 (%)
的折扣值。若要搜索作为字符而不是通配符的百分号,必须提供 ESCAPE 关键字和转义符。例如,一个样本数据库包含名为
comment 的列,该列含文本 30%。若要搜索在 comment 列中的任何位置包含字符串 30%
的任何行,请指定由 WHERE comment LIKE '%30!%% ' ESCAPE '! ' 组成的
WHERE 子句。如果不指定 ESCAPE 和转义符,SQL Server 将返回所有含字符串 30 的行。
下例使用 ESCAPE 子句和转义符查找 mytbl2 表的 c1 列中的精确字符串 10-15%
USE pubs
GO
IF EXISTS(SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_NAME = 'mytbl2 ')
DROP TABLE mytbl2
GO
USE pubs
GO
CREATE TABLE mytbl2
(
c1 sysname
)
GO
INSERT mytbl2 VALUES ( 'Discount is 10-15% off ')
INSERT mytbl2 VALUES ( 'Discount is .10-.15 off ')
GO
SELECT c1
FROM mytbl2
WHERE c1 LIKE '%10-15!% off% ' ESCAPE '! '
GO
四 使用 [] 通配符
下例查找姓为 Carson、Carsen、Karson 或 Karsen 的作者所在的行。
USE pubs
SELECT au_lname, au_fname, phone
FROM authors
WHERE au_lname LIKE '[CK]ars[eo]n '
ORDER BY au_lname ASC, au_fname ASC
分享到:
相关推荐
在SQL Server中,可以使用`LIKE`或`PATINDEX`函数进行简单的模式匹配,但正则表达式提供了更复杂的匹配规则,如贪婪与非贪婪匹配、分组、反向引用等。这使得在SQL查询中处理复杂的数据过滤和转换变得更加灵活。 接...
通过使用正则表达式,可以简化上述例子中的SQL查询语句。例如,同样的查询可以使用如下语句完成: ```sql SELECT * FROM Tablel WHERE name REGEXP '^[ABCD].*P$'; ``` 这里,`REGEXP`是正则表达式的SQL谓词,`'^...
本文将深入探讨SQL修改表语句以及正则表达式在数据处理中的应用。 **SQL修改表语句** SQL修改表语句允许我们动态地更新数据库中的表结构,以便适应业务需求的变化。以下是一些常见的SQL命令: 1. **添加列 (ALTER...
使用正则表达式可以编写简洁、强大的 SQL 语句,提高数据处理的效率和灵活性。熟练使用正则表达式可以帮助用户快速搜索、替换和验证数据,并提供高度的灵活性。 在 Oracle 数据库中,正则表达式的应用非常广泛,...
2. **错误排查**:正则表达式中的错误排查通常比标准SQL语句更加困难。开发者需要熟悉正则表达式的语法和特性,以便能够准确地定位和解决问题。 3. **性能考虑**:尽管正则表达式提供了强大的查询能力,但在某些...
- **增强的数据处理能力**:通过使用正则表达式,可以在数据库级别实现复杂的数据清洗和验证任务,提高了数据处理的效率和准确性。 - **集成到SQL语句中**:可以直接在SQL查询中使用正则表达式进行条件过滤,无需...
### Oracle正则表达式详解 正则表达式(Regular Expression)是一种强大的文本处理工具...通过上述内置函数,Oracle用户可以灵活地应用正则表达式进行复杂的数据处理和模式匹配,极大地提高了SQL语句的功能性和效率。
通过将正则表达式与SQL语句结合使用,可以在保证查询效率的同时,简化查询语句的复杂度,并便于后续的维护和错误排查。 综上所述,正则表达式在数据处理中的应用不仅限于数据库查询,在其他需要进行字符串匹配的...
例如,传统的SQL查询语句可能需要使用多个LIKE子句来匹配特定的模式,而使用正则表达式则可以将多个条件合并为一个简单的表达式,从而简化SQL语句的复杂度。以查询QQ号字段为例,一个基于标准SQL语句的查询可能是...
在实际应用中,可以通过`使用说明.txt`了解详细的使用方法,而`iPc.me.url`和`异次元软件世界.url`可能是指向在线资源或论坛的链接,可以进一步学习和交流关于正则表达式在MySQL中的高级技巧和最佳实践。 总之,...
### Oracle DBA必知必会的正则表达式 #### 一、正则表达式简介 正则表达式是一种强大的工具,它允许我们通过一种模式来匹配...此外,还可以使用在线的正则表达式测试工具来进行练习,以加深对正则表达式规则的理解。
正则表达式的使用可以显著提升SQL语句的效率,特别是在处理大量数据的模式匹配和替换场景。然而,由于其复杂性,正确理解和使用正则表达式需要一定的学习和实践。在编写涉及正则表达式的SQL语句时,应确保对模式和...
replace函数可以通过简单的字符串替换来更新数据,而regexp则可以使用复杂的正则表达式模式进行更灵活的数据匹配和替换。 首先,replace函数是MySQL中的字符串函数,用于在字符串中查找指定的子字符串并替换为另一...
通过正则表达式,用户可以在SQL语句中实现对字符串数据的高级操作。 #### 二、REGEXP_SUBSTR 函数详解 `REGEXP_SUBSTR` 是一个非常实用的函数,它可以基于正则表达式来提取字符串中的特定部分。此函数的通用语法为...
此外,正则表达式还可以结合其他数据库操作,如`LIKE`、`IN`和`NOT IN`一起使用,以实现更为复杂的查询需求。正则表达式的灵活性和强大功能使得它在数据处理和分析中具有广泛的应用,无论是简单的文本过滤还是复杂的...
通过正则表达式,可以实现对文本数据的模式识别、替换、分割等多种处理功能。在Oracle数据库中,正则表达式一般与REGEXP_LIKE函数结合使用,该函数用于实现正则表达式的匹配功能。 首先,\d是正则表达式中的一个...
通过以上介绍可以看出,Oracle数据库中的`LIKE`语句以及正则表达式提供了非常强大的文本匹配功能,这对于我们进行复杂的数据检索和处理非常有帮助。在实际应用中,根据具体的业务需求选择合适的匹配方法,可以大大...