【发布时间】:2015-12-31 06:17:23
【问题描述】:
我想准备如下查询:
SELECT name
FROM Employee
WHERE name LIKE IN ('alex%','raj%','rag%')
在 SQL Server 中可以吗?
【问题讨论】:
标签: sql-server
我想准备如下查询:
SELECT name
FROM Employee
WHERE name LIKE IN ('alex%','raj%','rag%')
在 SQL Server 中可以吗?
【问题讨论】:
标签: sql-server
在 SQL Server 中可以吗?
不,这是不可能的。
作为您的问题的解决方案,您需要使用 OR like
WHERE name LIKE 'alex%' OR name LIKE 'raj%' OR name LIKE 'rag%'
附带说明:
你也可以有一个技巧,假设你想使用列的前三个字符进行匹配,那么它会像
WHERE LEFT(name, 3) IN ('ale', 'raj', 'rag')
【讨论】:
您需要使用OR 而不是IN 运算符来执行此操作
SELECT name FROM Employee
WHERE name LIKE 'alex%' OR name LIKE 'raj%' OR name LIKE 'rag%'
【讨论】:
使用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));
}
}
您可以在SQL Server 中查看here 如何部署CLR 函数的说明。
那么你的问题可以这样解决:
SELECT name
FROM Employee
WHERE [dbo].[fn_Utils_RegexIsMatch] ('^alex.*|^raj.*^rag.*', name) = 1
当然,您现在可以使用正则表达式进行过滤:-)
【讨论】:
sql 选择查询
SELECT name FROM Employee
WHERE name LIKE 'alex' OR name LIKE 'raj' OR name LIKE 'rag';
【讨论】:
%
可以这样:
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)
【讨论】: