0

我来自 MySQL,现在在 SQL Server 中工作,编写一个存储过程,需要根据 Description 列中的值在“like”子句中设置一个值。不确定我是否应该声明一个变量(@desc),然后以某种方式设置它是否有更简单的方法?

伪代码:

DECLARE @desc varchar(255);
IF [Description] LIKE '%KK%'
    SET @desc = 'KDues';
ELSE
    SET @desc = 'BDues';

实际查询

    SELECT
    Description,AmountDue
    [...]
    WHERE order_date BETWEEN @fiscalYearBeginDate AND @fiscalYearEndDate
    AND [Description] LIKE '%'+@desc+'%'

解决这个问题的最佳方法是什么?不确定如何在此特定场景中使用 IF/ELSE 或 CASE。谢谢

4

2 回答 2

2

您可以使用以下case语句:

SELECT Description, AmountDue
[...]
WHERE order_date BETWEEN @fiscalYearBeginDate AND @fiscalYearEndDate and
      Description like (case when Description LIKE '%KK%' then '%KDues%' else '%BDues%' end)

然而,这很丑陋。您可以消除case使用逻辑:

WHERE order_date BETWEEN @fiscalYearBeginDate AND @fiscalYearEndDate and
      ((Description like '%KK%' and Description like '%KDues%') or
        (Description not like '%KK%' and Description like '%BDues%')
      )

顺便说一句,这两种形式在 MySQL 和 SQL Server 中是相同的。

于 2013-09-12T15:58:00.320 回答
2
SELECT
case when Description like '%KK%'
then 'KDues'
ELSE
'BDues' end as Description ,AmountDue
[...]
WHERE order_date BETWEEN @fiscalYearBeginDate AND @fiscalYearEndDate
于 2013-09-12T16:23:34.457 回答