我想准备一个类似的查询:
SELECT name
FROM Employee
WHERE name LIKE IN ('alex%','raj%','rag%')
是否可以在SQL Server中使用?
答案 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)
使用OR
和LIKE
组合的替代方法是实现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)