首頁 > 資料庫 > mysql教程 > 如何在SQL Server 2008 WHERE子句中正確使用CASE語句?

如何在SQL Server 2008 WHERE子句中正確使用CASE語句?

Linda Hamilton
發布: 2025-01-11 10:24:41
原創
733 人瀏覽過

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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板