0

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

在我的示例中,我希望能够以@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 = '逾期,不到一天,超过一天'并且仍然可以识别这些规则?

因此,如果我选择过期且少于 1 天,它将返回 sla_days < 0 和 sla days < 1 的两个值

4

1 回答 1

1

您不需要函数来提取变量。这将表现得更好。

您的特定问题的技巧是使用OR而不是AND,因为列中的值永远不会是,例如,> 0AND < 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 + ')';

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

于 2013-03-25T16:39:37.853 回答