在多变量参数中使用数学运算符

时间:2013-03-25 16:30:17

标签: sql sql-server dynamic-sql mathematical-optimization

我想知道是否可以在多变量参数中包含数学运算符和情境。

在我的例子中,我希望能够自由地进入'过期''不到一天'或'超过一天'作为@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

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 + ')';

最后,真的是否需要将这些丑陋的字符串传递给数据库?据推测,用户正在从多选或复选框中进行选择,在这种情况下,您可以使用更整齐的系数来表示每种情况。