请讲一下在SQL里LIKE与=的区别,我只知道like支持通配符如:like %123% 就可以检索出如:123123123之类的记录
=就不行请高手再讲的具体点

解决方案 »

  1.   

    %123%:只要含有123就满足条件。
    =当然只能是123菜满足条件。like 中%为通配符,可以为任何字符。
      

  2.   

    我发现在SQL语句里查找一个日期类弄的语句用
    select * from db where date=03-06-06 就出现类型错误,但是用
    select * from db where date like 03-06-06 就可以,这是为什么
      

  3.   

    like是模糊查询是用到的;=是精确查询用倒的
    eg:
    select * from tablename where fieldname=1   将查出所有的fieldname=1的记录
    select * from tablename where fieldname like 1% 将查出所有的fieldname的值以1开头的记录
    select * from tablename where fieldname like %1% 将查出所有的fieldname的值中包含1的记录
    select * from tablename where fieldname like %1 将查出所有的fieldname的值以1结尾的记录
      

  4.   

    LIKE
    确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字符串的任意片段匹配通配符。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 LIKE 运算符更加灵活。如果任何参数都不属于字符串数据类型,Microsoft? SQL Server? 会将其转换成字符串数据类型(如果可能)。语法
    match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]参数
    match_expression任何字符串数据类型的有效 SQL Server 表达式。patternmatch_expression 中的搜索模式,可以包含下列有效 SQL Server 通配符。通配符 描述 示例 
    % 包含零个或更多字符的任意字符串。 WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名。 
    _(下划线) 任何单个字符。 WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。 
    [ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。 WHERE au_lname LIKE '[C-P]arsen' 将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如,Carsen、Larsen、Karsen 等。 
    [^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。 WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。 
    escape_character字符串数据类型分类中的所有数据类型的任何有效 SQL Server 表达式。escape_character 没有默认值,且必须仅包含一个字符。结果类型
    Boolean结果值
    如果 match_expression 匹配指定模式,LIKE 将返回 TRUE。注释
    当使用 LIKE 进行字符串比较时,模式字符串中的所有字符都有意义,包括起始或尾随空格。如果查询中的比较要返回包含"abc "(abc 后有一个空格)的所有行,则将不会返回包含"abc"(abc 后没有空格)的列所在行。但是可以忽略模式所要匹配的表达式中的尾随空格。如果查询中的比较要返回包含"abc"(abc 后没有空格)的所有行,则将返回以"abc"开始且具有零个或多个尾随空格的所有行。由于数据存储方式的原因,使用包含 char 和 varchar 数据模式的字符串比较可能无法通过 LIKE 比较。了解每种数据类型的存储方式以及导致 LIKE 比较失败的原因十分重要。下面的示例将局部 char 变量传递给存储过程,然后使用模式匹配查找某个作者的所有著作。在此过程中,作者的姓将作为变量传递。CREATE PROCEDURE find_books @AU_LNAME char(20)
    AS
    SELECT @AU_LNAME = RTRIM(@AU_LNAME) + '%'
    SELECT t.title_id, t.title 
    FROM authors a, titleauthor ta, titles t
    WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id
       AND a.au_lname LIKE @AU_LNAME当名字中包含的字符数小于 20 时,char 变量 (@AU_LNAME) 将包含尾随空格,这导致 find_books 过程中没有行返回。由于 au_lname 列为 varchar 类型,所以没有尾随空格。因为尾随空格是有意义的,所以此过程失败。 但下面的示例是成功的,因为尾随空格没有被添加到 varchar 变量中:USE pubs
    GO
    CREATE PROCEDURE find_books2 @au_lname varchar(20)
    AS
    SELECT t.title_id, t.title 
    FROM authors a, titleauthor ta, titles t
    WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id
       AND a.au_lname LIKE @au_lname + '%'EXEC find_books2 'ring'下面是结果集:title_id title                                                                            
    -------- ---------------------------------------------------------------
    MC3021   The Gourmet Microwave                                                            
    PS2091   Is Anger the Enemy?                                                              
    PS2091   Is Anger the Enemy?                                                              
    PS2106   Life Without Fear                                                                (4 row(s) affected)
    --------------------------------------
    看见了么,
    那支蛾子,
    正飞向太阳,
    那就是我!
    --------------------------------------
      

  5.   

    LIKE
    确定给定的字符串是否与指定的模式匹配。模式可以包含常规字符和通配符字符。模式匹配过程中,常规字符必须与字符串中指定的字符完全匹配。然而,可使用字符串的任意片段匹配通配符。与使用 = 和 != 字符串比较运算符相比,使用通配符可使 LIKE 运算符更加灵活。如果任何参数都不属于字符串数据类型,Microsoft® SQL Server™ 会将其转换成字符串数据类型(如果可能)。语法
    match_expression [ NOT ] LIKE pattern [ ESCAPE escape_character ]参数
    match_expression任何字符串数据类型的有效 SQL Server 表达式。patternmatch_expression 中的搜索模式,可以包含下列有效 SQL Server 通配符。通配符 描述 示例 
    % 包含零个或更多字符的任意字符串。 WHERE title LIKE '%computer%' 将查找处于书名任意位置的包含单词 computer 的所有书名。 
    _(下划线) 任何单个字符。 WHERE au_fname LIKE '_ean' 将查找以 ean 结尾的所有 4 个字母的名字(Dean、Sean 等)。 
    [ ] 指定范围 ([a-f]) 或集合 ([abcdef]) 中的任何单个字符。 WHERE au_lname LIKE '[C-P]arsen' 将查找以arsen 结尾且以介于 C 与 P 之间的任何单个字符开始的作者姓氏,例如,Carsen、Larsen、Karsen 等。 
    [^] 不属于指定范围 ([a-f]) 或集合 ([abcdef]) 的任何单个字符。 WHERE au_lname LIKE 'de[^l]%' 将查找以 de 开始且其后的字母不为 l 的所有作者的姓氏。 
    escape_character字符串数据类型分类中的所有数据类型的任何有效 SQL Server 表达式。escape_character 没有默认值,且必须仅包含一个字符。结果类型
    Boolean结果值
    如果 match_expression 匹配指定模式,LIKE 将返回 TRUE。注释
    当使用 LIKE 进行字符串比较时,模式字符串中的所有字符都有意义,包括起始或尾随空格。如果查询中的比较要返回包含"abc "(abc 后有一个空格)的所有行,则将不会返回包含"abc"(abc 后没有空格)的列所在行。但是可以忽略模式所要匹配的表达式中的尾随空格。如果查询中的比较要返回包含"abc"(abc 后没有空格)的所有行,则将返回以"abc"开始且具有零个或多个尾随空格的所有行。由于数据存储方式的原因,使用包含 char 和 varchar 数据模式的字符串比较可能无法通过 LIKE 比较。了解每种数据类型的存储方式以及导致 LIKE 比较失败的原因十分重要。下面的示例将局部 char 变量传递给存储过程,然后使用模式匹配查找某个作者的所有著作。在此过程中,作者的姓将作为变量传递。CREATE PROCEDURE find_books @AU_LNAME char(20)
    AS
    SELECT @AU_LNAME = RTRIM(@AU_LNAME) + '%'
    SELECT t.title_id, t.title 
    FROM authors a, titleauthor ta, titles t
    WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id
       AND a.au_lname LIKE @AU_LNAME当名字中包含的字符数小于 20 时,char 变量 (@AU_LNAME) 将包含尾随空格,这导致 find_books 过程中没有行返回。由于 au_lname 列为 varchar 类型,所以没有尾随空格。因为尾随空格是有意义的,所以此过程失败。 但下面的示例是成功的,因为尾随空格没有被添加到 varchar 变量中:USE pubs
    GO
    CREATE PROCEDURE find_books2 @au_lname varchar(20)
    AS
    SELECT t.title_id, t.title 
    FROM authors a, titleauthor ta, titles t
    WHERE a.au_id = ta.au_id AND ta.title_id = t.title_id
       AND a.au_lname LIKE @au_lname + '%'EXEC find_books2 'ring'下面是结果集:title_id title                                                                            
    -------- ---------------------------------------------------------------
    MC3021   The Gourmet Microwave                                                            
    PS2091   Is Anger the Enemy?                                                              
    PS2091   Is Anger the Enemy?                                                              
    PS2106   Life Without Fear                                                                (4 row(s) affected)