在SQL中使用Like的Case语句

9 浏览
0 Comments

在SQL中使用Like的Case语句

你好,我有一条SQL语句。尽管CalendarName的值类似于"Quarterly (EOM)",但最终我仍然得到了0。有什么想法和建议吗?

0
0 Comments

在SQL中使用Like语句时遇到问题,问题的原因可能是空值或大小写敏感的问题。解决方法是使用ISNULL()函数来排除空值问题,使用UPPER()函数来排除大小写敏感问题。示例如下:

-- 使用ISNULL()函数排除空值问题
CASE WHEN ISNULL(EmpowerCalendarCode.CalendarName, 'none') LIKE '%MONTHLY%' THEN 3...

-- 使用UPPER()函数排除大小写敏感问题
CASE WHEN UPPER(ISNULL(EmpowerCalendarCode.CalendarName, 'none')) LIKE '%MONTHLY%' THEN 3...

0
0 Comments

在这个问题中,出现的原因是使用了错误的语法。原本的SQL语句将LIKE语句放在了WHERE子句中,而正确的做法是将其放在SELECT语句中的CASE表达式中。解决这个问题的方法是将LIKE语句移动到正确的位置,即CASE表达式中。

下面是修正后的SQL语句:

INSERT INTO Foundation.TaxLiability.EmpowerSystemCalendarCode
SELECT SystemTax.SystemTaxID,
       EmpowerCalendarCode.CalendarCodeID
      ,CASE WHEN  EmpowerCalendarCode.CalendarName LIKE '%Monthly%' THEN 3
            WHEN  EmpowerCalendarCode.CalendarName LIKE '%Annual%' THEN 2
            WHEN  EmpowerCalendarCode.CalendarName LIKE '%Quarterly%' THEN 4
       ELSE 0
       END
FROM Foundation.Common.SystemTax SystemTax
INNER JOIN Foundation.TaxLiability.EmpowerCalendarCode EmpowerCalendarCode
    ON SystemTax.EmpowerTaxCode = EmpowerCalendarCode.LongAgencyCode 
    AND SystemTax.EmpowerTaxType = EmpowerCalendarCode.EmpowerTaxType

此外,还有一个提问是,如果移除INSERT INTO语句会发生什么?对此的回答是,移除INSERT INTO语句将不会将结果插入到目标表中,而只是执行查询操作。这个问题的回答者认为,修正语法并不能解决问题,可能是因为问题的提问者在修改代码时还进行了其他更改。

这个问题的原因是错误的语法使用,解决方法是将LIKE语句放在正确的位置,并且还有一个额外的讨论是关于移除INSERT INTO语句的影响。

0
0 Comments

问题:使用SQL中的Like语句进行Case Statement时出现的原因以及解决方法

在SQL查询中,使用Like语句进行模糊匹配是非常常见的操作。然而,有时候我们需要根据条件来动态构建Like语句,这就需要使用到Case Statement。下面的代码展示了一个使用Like和Case Statement的例子:

select *
from table
where columnName like '%' + case when  is null then '' else  end  +  ' %'

这段代码的目的是根据条件动态地构建Like语句。然而,代码中存在一些问题,导致查询可能无法正常工作。让我们来分析一下这个问题的原因和解决方法。

问题的原因是在Case Statement中没有提供一个默认的返回值。当表达式为空时,Case Statement没有返回任何值。这导致了Like语句中的拼接操作出现问题,因为没有提供一个有效的值来连接字符串。

为了解决这个问题,我们需要在Case Statement中提供一个默认的返回值。在这个例子中,我们可以在Case Statement的else分支中添加一个空字符串作为默认返回值。这样,即使表达式为空,我们仍然可以获得一个有效的值来拼接字符串。

下面是修改后的代码示例:

select *
from table
where columnName like '%' + case when  is null then '' else  end  +  ' %'

通过添加一个空字符串作为默认返回值,我们可以确保在构建Like语句时不会出现错误。这样,查询就能够按预期工作了。

0