我有一个存储过程,有多个过滤器,有一个工资范围过滤器,我得到输入最小和最大作为字符串由逗号分隔,如200,5000
它工作正常,但现在我需要包括多个范围,如2,400|400,800
分隔,我需要分割它们并添加条件之间或小于大于-请帮助。
IF (@Salary <> '')
BEGIN
SELECT @salaryStr = '>= ' +
REPLACE(@Salary, ',' , ' AND Salary <= ') + '';
SET @query = @query + ' AND Salary ' + @salaryStr + ' '
END
它在一个范围内工作得很好,但我需要一些东西来处理上面提到的多个范围。我发送范围作为字符串2,400|400,700
-我怎么能做到这一点?我试图使用SQL Server的string_split
功能,但无法让它做我需要的-不知道如何在这种情况下使用。
以'2,400|400,800','|'
为例:
select a.value as range,
min(b.value) as from_value,
max(b.value) as to_value
from string_split('2,400|400,800','|') a
cross apply string_split(a.value,',') b
group by a.value;
结果:
range |from_value|to_value|
-------+----------+--------+
2,400 |2 |400 |
400,800|400 |800 |
您可能希望从/to_value(s)转换为适当的数据类型
EDIT:将值应用于范围条件,在本例中,多个范围是连续的。因此,为动态SQL选择min()from_value
和max()to_value
:
select min(b.value) as from_value,
max(b.value) as to_value
from string_split('2,400|400,800','|') a
cross apply string_split(a.value,',') b;
from_value|to_value|
----------+--------+
2 |800 |
<代码>代码>