`
qiujiayu
  • 浏览: 174053 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sql语句like的用法 有些正则表达式可以通过like实现

阅读更多

在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 语法分析,正则表达式解析C#文件;正则表达式实现的语法分析引擎

    在SQL Server中,可以使用`LIKE`或`PATINDEX`函数进行简单的模式匹配,但正则表达式提供了更复杂的匹配规则,如贪婪与非贪婪匹配、分组、反向引用等。这使得在SQL查询中处理复杂的数据过滤和转换变得更加灵活。 接...

    正则表达式在数据库查询中的应用

    通过使用正则表达式,可以简化上述例子中的SQL查询语句。例如,同样的查询可以使用如下语句完成: ```sql SELECT * FROM Tablel WHERE name REGEXP '^[ABCD].*P$'; ``` 这里,`REGEXP`是正则表达式的SQL谓词,`'^...

    SQL修改表语句和正则表达式

    本文将深入探讨SQL修改表语句以及正则表达式在数据处理中的应用。 **SQL修改表语句** SQL修改表语句允许我们动态地更新数据库中的表结构,以便适应业务需求的变化。以下是一些常见的SQL命令: 1. **添加列 (ALTER...

    Oracle数据库正则表达式

    使用正则表达式可以编写简洁、强大的 SQL 语句,提高数据处理的效率和灵活性。熟练使用正则表达式可以帮助用户快速搜索、替换和验证数据,并提供高度的灵活性。 在 Oracle 数据库中,正则表达式的应用非常广泛,...

    正则表达式在oracle中的应用

    2. **错误排查**:正则表达式中的错误排查通常比标准SQL语句更加困难。开发者需要熟悉正则表达式的语法和特性,以便能够准确地定位和解决问题。 3. **性能考虑**:尽管正则表达式提供了强大的查询能力,但在某些...

    Oracle 10g 针对正则表达式的支持分析

    - **增强的数据处理能力**:通过使用正则表达式,可以在数据库级别实现复杂的数据清洗和验证任务,提高了数据处理的效率和准确性。 - **集成到SQL语句中**:可以直接在SQL查询中使用正则表达式进行条件过滤,无需...

    正则表达式

    ### Oracle正则表达式详解 正则表达式(Regular Expression)是一种强大的文本处理工具...通过上述内置函数,Oracle用户可以灵活地应用正则表达式进行复杂的数据处理和模式匹配,极大地提高了SQL语句的功能性和效率。

    基于正则表达式的数据处理应用.pdf

    通过将正则表达式与SQL语句结合使用,可以在保证查询效率的同时,简化查询语句的复杂度,并便于后续的维护和错误排查。 综上所述,正则表达式在数据处理中的应用不仅限于数据库查询,在其他需要进行字符串匹配的...

    基于正则表达式的数据处理应用 (1).pdf

    例如,传统的SQL查询语句可能需要使用多个LIKE子句来匹配特定的模式,而使用正则表达式则可以将多个条件合并为一个简单的表达式,从而简化SQL语句的复杂度。以查询QQ号字段为例,一个基于标准SQL语句的查询可能是...

    正则表达式MySQL参考文档

    在实际应用中,可以通过`使用说明.txt`了解详细的使用方法,而`iPc.me.url`和`异次元软件世界.url`可能是指向在线资源或论坛的链接,可以进一步学习和交流关于正则表达式在MySQL中的高级技巧和最佳实践。 总之,...

    Oracle DBA必知必会的正则表达式

    ### Oracle DBA必知必会的正则表达式 #### 一、正则表达式简介 正则表达式是一种强大的工具,它允许我们通过一种模式来匹配...此外,还可以使用在线的正则表达式测试工具来进行练习,以加深对正则表达式规则的理解。

    Oracle 总结的正则表达式带有详细的例子与解释

    正则表达式的使用可以显著提升SQL语句的效率,特别是在处理大量数据的模式匹配和替换场景。然而,由于其复杂性,正确理解和使用正则表达式需要一定的学习和实践。在编写涉及正则表达式的SQL语句时,应确保对模式和...

    MySQL中使用replace、regexp进行正则表达式替换的用法分析

    replace函数可以通过简单的字符串替换来更新数据,而regexp则可以使用复杂的正则表达式模式进行更灵活的数据匹配和替换。 首先,replace函数是MySQL中的字符串函数,用于在字符串中查找指定的子字符串并替换为另一...

    Oracle正则表达式

    通过正则表达式,用户可以在SQL语句中实现对字符串数据的高级操作。 #### 二、REGEXP_SUBSTR 函数详解 `REGEXP_SUBSTR` 是一个非常实用的函数,它可以基于正则表达式来提取字符串中的特定部分。此函数的通用语法为...

    正则表达式和运算符PPT学习教案.pptx

    此外,正则表达式还可以结合其他数据库操作,如`LIKE`、`IN`和`NOT IN`一起使用,以实现更为复杂的查询需求。正则表达式的灵活性和强大功能使得它在数据处理和分析中具有广泛的应用,无论是简单的文本过滤还是复杂的...

    Oracle数据库正则表达式使用场景代码实例

    通过正则表达式,可以实现对文本数据的模式识别、替换、分割等多种处理功能。在Oracle数据库中,正则表达式一般与REGEXP_LIKE函数结合使用,该函数用于实现正则表达式的匹配功能。 首先,\d是正则表达式中的一个...

    sql的like用法

    通过以上介绍可以看出,Oracle数据库中的`LIKE`语句以及正则表达式提供了非常强大的文本匹配功能,这对于我们进行复杂的数据检索和处理非常有帮助。在实际应用中,根据具体的业务需求选择合适的匹配方法,可以大大...

Global site tag (gtag.js) - Google Analytics