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中文网其他相关文章!