如何拆分字符串并在存储过程中应用条件或小于大于条件?



我有一个存储过程,有多个过滤器,有一个工资范围过滤器,我得到输入最小和最大作为字符串由逗号分隔,如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     |
<代码>

相关内容

  • 没有找到相关文章

最新更新