原文发布时间为:2010-10-28 —— 来源于本人的百度文章 [由搬家工具导入]

在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语句like的用法 有些正则表达式可以通过like实现的更多相关文章

  1. sql语句Group By用法-转载

    sql语句Group By用法一则 2007-10-25 12:00 sql语句Group By用法一则 如果我们的需求变成是要算出每一间店 (store_name) 的营业额 (sales),那怎么 ...

  2. (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法

    总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法 总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中 ...

  3. 总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法

    总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法 日期:2005年6月1日 作者:seasky212 总结一下SQL语句中引号(').quoted ...

  4. (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法

    总结一下SQL语句中引号(').quotedstr().('').format()在SQL语句中的用法以及SQL语句中日期格式的表示(#).('')在Delphi中进行字符变量连接相加时单引号用('' ...

  5. Mysql常用sql语句(21)- regexp 正则表达式查询

    测试必备的Mysql常用sql语句系列 https://www.cnblogs.com/poloyy/category/1683347.html 前言 正则的强大不言而喻,Mysql中也提供了 reg ...

  6. sql语句的基本用法总结

    一.sql语法 select */列名1,列名2... from 表名[连接查询 内连接/左连接 on条件] 必选的 where 条件 子查询/in/exists/between ... and .. ...

  7. sql语句-CASE WHEN用法详解

    当我们需要从数据源上 直接判断数据显示代表的含义的时候 ,就可以在SQL语句中使用 Case When这个函数了. Case具有两种格式.简单Case函数和Case搜索函数. 第一种 格式 : 简单C ...

  8. sql语句的join用法

    sql的join分为三种,内连接.外连接.交叉连接. 以下先建2张表,插入一些数据,后续理解起来更方便一些. create table emp(empno int, name char(20),dep ...

  9. sql语句having子句用法,很多时候你曾忘掉

    显示每个地区的总人口数和总面积.仅显示那些面积超过1000000的地区. SELECT region, SUM(population), SUM(area) FROM bbc GROUP BY reg ...

随机推荐

  1. Linux下 tomcat 的开机自启动设置

    每次开机都要启动tomcat,非常麻烦:通过直接修改系统文件,实现tomcat自启动: 1. 修改脚本文件rc.local:vim /etc/rc.d/rc.local 这个脚本是使用者自定的开机启动 ...

  2. mysql零散操作

    添加对外用户 CREATE USER 'admin'@'%' IDENTIFIED BY '!QAZ2wsx'; GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%'; ...

  3. hive的常用HQL语句

    1.过滤条件 where .limit. distinct. between and . null. is not nullselect * from emp where sal > 3000; ...

  4. Python开发不可不知的虚拟环境

    一.python3.3之后自带的venv模块 1. 创建虚拟环境 python3.6 -m venv project-env 2. 加入虚拟环境目录 cd pronject-env 3. 激活虚拟环境 ...

  5. Codeforces Round #524 (Div. 2) C. Masha and two friends 思路

    题目:题目链接 思路:直接计数显然是不好处理的,但分情况讨论只要不写错这题是一定可以出的,但这样基本做完这个题就没时间做其他题了,但当时我就这么蠢的这样做了,比赛一个半小时的时候突然发现一个似乎可行的 ...

  6. 动态规划:HDU1160-FatMouse's Speed(记录动态规划状态转移过程)

    FatMouse's Speed Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  7. #include "*.c"文件的妙用

    在看uCOS II V2.91版本源代码时,在ucos_ii.c源文件中发现下面的代码: #include <os_core.c> #include <os_flag.c> # ...

  8. CQRS之旅——旅程5(准备发布V1版本)

    旅程5:准备发布V1版本 添加功能和重构,为V1版本发布做准备. "大多数人在完成一件事之后,就像留声机的唱片一样,一遍又一遍地使用它,直到它破碎,忘记了过去是用来创造更多未来的东西.&qu ...

  9. HDU 3848 CC On The Tree 树形DP

    题意: 给出一棵边带权的树,求距离最近的一对叶子. 分析: 通过DFS计算出\(min(u)\):以\(u\)为根的子树中最近叶子到\(u\)的距离. 然后维护一个前面子树\(v_i\)中叶子到\(u ...

  10. cakephp中使用 find('count')方法

    对于find('count',array('group'=>'user_id')); Model.php中这样描述: /** * Handles the before/after filter ...