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>
日期比較也需要仔細考慮。 使用單獨的 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>
以上是如何在SQL Server 2008 WHERE子句中正確使用CASE語句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!