我想知道是否可以在多变量参数中包含数学运算符和情境。
在我的例子中,我希望能够自由地进入'过期''不到一天'或'超过一天'作为@SLA_Days。
目前,我可以输入这些变量中的任何一个,它将返回一个结果。
if @sla_days = 'Overdue'
BEGIN
SELECT @sql = @sql + 'and sla_days < 0'
END
ELSE
if @sla_days = 'Less than one day'
BEGIN
SELECT @sql = @sql + 'and sla_days <1 and sla_days >0'
END
ELSE
if @sla_days = 'More than one day'
BEGIN
SELECT @sql = @sql + 'and sla_days > 1'
END
EXEC sp_exectuesql @SQL
我确实有一个我创建的函数,它将看起来以逗号分隔的字符串并提取变量。我不需要帮助来创建这个
我需要帮助的是,是否可以输入@SLA_days ='逾期,不到一天,超过一天'并仍然认识到这些规则?
因此,如果我选择了Overdue且不到一天,它将返回sla_days&lt; 0和sla天&lt; 1
答案 0 :(得分:1)
您不需要函数来提取变量。这将表现得更好。
针对您的具体问题的诀窍是使用OR
而不是AND
,因为列中的值永远不会是> 0
和< 0
。我还在变量的每一侧添加逗号,以便可以按任何顺序识别条件。但请注意,如果逗号之间也有空格,则无法找到值 - 您必须对此进行调整。
SET @SLA_days = ',' + @SLA_days + ',';
SET @sql = @sql + ' (1=2 '
+ CASE WHEN @SLA_days LIKE '%,Overdue,%'
THEN ' OR (sla_days < 0)' ELSE '' END
+ CASE WHEN @SLA_days LIKE '%,Less than one day,%'
THEN ' OR (sla_days < 1 AND sla_days > 0)' ELSE '' END
+ CASE WHEN @SLA_days LIKE '%,More than one day,%'
THEN ' OR (sla_days > 1)' ELSE '' END + ')';
最后,真的是否需要将这些丑陋的字符串传递给数据库?据推测,用户正在从多选或复选框中进行选择,在这种情况下,您可以使用更整齐的系数来表示每种情况。