代码之家  ›  专栏  ›  技术社区  ›  user1184100

使用带集合的通配符

  •  3
  • user1184100  · 技术社区  · 6 年前

    productName   description
    
    +++++++++++++++++++++++++
    
    OpenIDM       Platform for building enterprise provisioning solutions
    
    OpenDM        Full-featured access management
    
    OpenDJ        Robust LDAP server for Java
    

    在上表中,当我运行下面的查询时,我得到了预期的前两条记录。

    DECLARE @searchInput varchar
    SET @searchInput = 'dm'
    SELECT * FROM ForgeRock
    WHERE productName like '%DM%'
    

    结果 用于构建企业资源调配解决方案的OpenIDM平台 OpenDM全功能访问管理

    但是当我运行下面的查询时,模式匹配似乎不能正常工作,我得到了所有的记录。

    DECLARE @searchInput varchar
    SET @searchInput = 'dm'
    SELECT * FROM ForgeRock
    WHERE productName like '%'+@searchInput+'%'
    

    http://sqlfiddle.com/#!18/6e9af/8

    3 回复  |  直到 6 年前
        1
  •  4
  •   Squirrel    6 年前

    您没有声明varchar字符串的大小。默认为1。做一个 SELECT @searchInput 你自己看看

    DECLARE @searchInput varchar
    SET @searchInput = 'dm'
    
    SELECT @searchInput 
    
        2
  •  0
  •   Noldy Nayoan    6 年前

    是的,就像@lamu和@squirrel说的,你应该声明搜索字符串的长度,例如:

    DECLARE @searchInput varchar(50)
    
        3
  •  0
  •   Bhargav J Patel    6 年前

    当您声明一个没有任何大小操作系统的变量时,默认值为1。 例如,你有贴花

    DECLARE @searchInput varchar(10)
    SET @searchInput = 'dm'
    

    如果声明的大小不超过它只需要d,并且d存在于所有行中,因此它返回所有行。