ホームページ >データベース >mysql チュートリアル >SQL Server 2008 の WHERE 句で CASE ステートメントを正しく使用する方法

SQL Server 2008 の WHERE 句で CASE ステートメントを正しく使用する方法

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-11 10:24:41735ブラウズ

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 ステートメント=LIKEに値を代入しようとする試みです。 CASE ステートメントは、代入ではなく、条件付きの 値の生成 に使用する必要があります。 修正されたアプローチではブール論理を使用します:

<code class="language-sql">WHERE (LEN('TestPerson') = 0 AND co.personentered = co.personentered)
   OR (LEN('TestPerson') > 0 AND co.personentered LIKE '%TestPerson')</code>

この改訂されたクエリは、「Testperson」の長さに基づいて条件を正しく評価します。

日付の比較にも注意が必要です。 多くの場合、複数のネストされた CASE ステートメントの代わりに、個別の OR 条件を使用する方が明確で効率的です。

<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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。