如何使用LIKE和IN运算符相同... ... LIKE IN(' alex%',' raj%',' rag%' )?

时间:2015-12-31 06:17:23

标签: sql-server

我想准备一个类似的查询:

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

是否可以在SQL Server中使用?

5 个答案:

答案 0 :(得分:3)

  

是否可以在SQL Server中使用?

不,这是不可能的。

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

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

旁注:

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

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

答案 1 :(得分:1)

您需要使用OR代替IN运算符才能执行此操作

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

答案 2 :(得分:1)

使用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));
    }
}

并且您提供here指示,了解如何在CLR部署SQL Server功能。

然后你的问题可以这样解决:

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

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

答案 3 :(得分:0)

sql select query

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

答案 4 :(得分:0)

可以这样:

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)