拆分where子句或like子句的字符串

时间:2014-08-08 13:38:58

标签: sql sql-server

我有一个看起来像

的值
hh12,mm13,kk14,ll55. 

我目前将其拆分并使用where value in子句来查找字符串中包含这些id的记录。我现在必须允许像这样的字符串输入。

hh,mm,kk,ll

除了上面的字符串在同一个参数中。这些是上面相同代码的两个字符前缀。如果用户输入两个字符数字,我需要能够获取'hh%''mm%'等值的所有记录。我不确定这是否可能从类似的角度来看。有什么想法吗?

我目前在我的where子句中使用它

其中id为(IN(SELECT * FROM functions.dbo.Split_DelimitedString_fn(@ids,',')

但是当客户端输入2个字符代码时,如何将同一个字符串的相同逻辑转换为多个喜欢?

2 个答案:

答案 0 :(得分:0)

嗯,这不是SARGable。但你可以做到

WHERE LEFT(id,2)IN(SELECT * FROM Functions.dbo.Split_DelimitedString_fn(@ids,','))

虽然每次执行都会导致表扫描,但只有在知道你的表格相当小的时候才会这样做。

除此之外,您可以使用动态sql创建多个带有喜欢的OR子句。

答案 1 :(得分:0)

如果我理解正确,您应该考虑使用regular expressions^hh[0-9]{2}$将是您需要使用的模式之一。