zoukankan      html  css  js  c++  java
  • sql语句like的用法 有些正则表达式可以通过like实现

    原文发布时间为: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

  • 相关阅读:
    表值参数学习
    js闭包
    vue相关
    js的面向对象
    JavaScript中template模板引擎
    使用原生的ajax的步骤(五个步骤)
    (a ==1 && a== 2 && a==3) 有可能是 true 吗?
    这道JS笔试题你做对了吗?
    JS事件分类
    JS事件绑定模型
  • 原文地址:https://www.cnblogs.com/handboy/p/7163983.html
Copyright © 2011-2022 走看看