ホームページ >データベース >mysql チュートリアル >SQL Server 2008 の WHERE 句で CASE ステートメントを正しく使用する方法
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 サイトの他の関連記事を参照してください。