【问题标题】:How to use LIKE and IN operator at the same like ...name LIKE IN ('alex%','raj%','rag%')? [duplicate]如何同时使用 LIKE 和 IN 运算符,例如 ...name LIKE IN ('alex%','raj%','rag%')? [复制]
【发布时间】:2015-12-31 06:17:23
【问题描述】:

我想准备如下查询:

SELECT name 
FROM Employee 
WHERE name LIKE IN ('alex%','raj%','rag%') 

在 SQL Server 中可以吗?

【问题讨论】:

    标签: sql-server


    【解决方案1】:

    在 SQL Server 中可以吗?

    不,这是不可能的。

    作为您的问题的解决方案,您需要使用 OR like

    WHERE name LIKE 'alex%' OR name LIKE  'raj%' OR name LIKE 'rag%'
    

    附带说明:

    你也可以有一个技巧,假设你想使用列的前三个字符进行匹配,那么它会像

    WHERE LEFT(name, 3) IN ('ale', 'raj', 'rag')
    

    【讨论】:

      【解决方案2】:

      您需要使用OR 而不是IN 运算符来执行此操作

      SELECT name FROM Employee 
      WHERE name LIKE 'alex%' OR name LIKE  'raj%' OR name LIKE 'rag%'
      

      【讨论】:

      • 投反对票的人可以发表评论
      【解决方案3】:

      使用ORLIKE 组合的替代方案是实现CLR 正则表达式函数,因为没有原生T-SQL 正则表达式支持。

      您可以使用以下函数来检查给定的字符串是否与某个值匹配:

      /// <summary>
      ///    Indicates whether the regular expression specified in the Regex constructor finds a match in a specified input string.
      /// </summary>
      /// <param name="sqlPatern">Regular expression</param>
      /// <param name="sqlValue">The string to search for a match.</param>
      /// <returns></returns>
      [SqlFunction(DataAccess = DataAccessKind.None, IsDeterministic = true)]
      public static SqlBoolean IsMatch(SqlString sqlPatern, SqlString sqlValue)
      {
          if (sqlPatern.IsNull || sqlValue.IsNull)
          {
              return new SqlBoolean(false);
          }
          else
          {
              Regex rgx = new Regex(sqlPatern.Value);
              return new SqlBoolean(rgx.IsMatch(sqlValue.Value));
          }
      }
      

      您可以在SQL Server 中查看here 如何部署CLR 函数的说明。

      那么你的问题可以这样解决:

      SELECT name 
      FROM Employee 
      WHERE [dbo].[fn_Utils_RegexIsMatch] ('^alex.*|^raj.*^rag.*', name) = 1
      

      当然,您现在可以使用正则表达式进行过滤:-)

      【讨论】:

        【解决方案4】:

        sql 选择查询

        SELECT name FROM Employee 
        WHERE name LIKE 'alex' OR name LIKE  'raj' OR name LIKE 'rag';
        

        【讨论】:

        • 您好像忘记了通配符 %
        【解决方案5】:

        可以这样:

        declare @t table (value varchar (20))
        insert into @t VALUES ('ale')
        insert into @t VALUES ('raj')
        insert into @t VALUES ('rag')
        
        declare @your_table table (your_columnname varchar (255))
        
        insert into @your_table VALUES ('ale')
        
        select * from @your_table where your_columnname in (select value from @t)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-05-28
          • 1970-01-01
          • 2012-01-08
          • 1970-01-01
          • 2011-12-06
          • 2018-12-02
          • 1970-01-01
          相关资源
          最近更新 更多