首页 >数据库 >mysql教程 >如何在SQL Server 2008 WHERE子句中正确使用CASE语句?

如何在SQL Server 2008 WHERE子句中正确使用CASE语句?

Linda Hamilton
Linda Hamilton原创
2025-01-11 10:24:41738浏览

How to Correctly Use CASE Statements in SQL Server 2008 WHERE Clauses?

SQL Server 2008 WHERE 子句:正确的 CASE 语句用法

在 SQL Server 2008 WHERE 子句中使用 CASE 语句需要精确的语法才能正确执行。 以下说明常见错误及其解决方案。

WHERE 子句中不正确的 CASE 语句放置示例:

<code class="language-sql">WHERE 
    CASE LEN('TestPerson')
        WHEN 0 THEN co.personentered  = co.personentered
        ELSE co.personentered LIKE '%TestPerson'
    END 
    AND cc.ccnum = CASE LEN('TestFFNum')
        WHEN 0 THEN cc.ccnum 
        ELSE 'TestFFNum' 
    END </code>

问题是尝试使用 在 CASE 语句中 = 赋值。 CASE 语句应用于条件LIKE值生成,而不是赋值。 正确的方法使用布尔逻辑:

<code class="language-sql">WHERE (LEN('TestPerson') = 0 AND co.personentered = co.personentered)
   OR (LEN('TestPerson') > 0 AND co.personentered LIKE '%TestPerson')</code>
此修改后的查询根据“TestPerson”的长度正确评估条件。

日期比较也需要仔细考虑。 使用单独的 OR 条件而不是多个嵌套的 CASE 语句通常更清晰、更高效:

<code class="language-sql">WHERE (LEN('2011-01-09 11:56:29.327') = 0 AND co.DTEntered = co.DTEntered)
   OR (LEN('2011-01-09 11:56:29.327') > 0 AND LEN('2012-01-09 11:56:29.327') = 0 AND co.DTEntered >= '2011-01-09 11:56:29.327')
   OR (LEN('2011-01-09 11:56:29.327') > 0 AND LEN('2012-01-09 11:56:29.327') > 0 AND co.DTEntered BETWEEN '2011-01-09 11:56:29.327' AND '2012-01-09 11:56:29.327')</code>
通过使用这些更正的语法,在 WHERE 子句中合并 CASE 语句的 SQL Server 2008 查询将按预期执行。

以上是如何在SQL Server 2008 WHERE子句中正确使用CASE语句?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn