sql >> データベース >  >> RDS >> Sqlserver

SQLServer2008のWHERE句内のCASEステートメント

    まず、CASE ステートメントは一部である必要があります 式自体ではなく、式の。

    言い換えれば、あなたは持つことができます:

    WHERE co.DTEntered = CASE 
                              WHEN LEN('blah') = 0 
                                   THEN co.DTEntered 
                              ELSE '2011-01-01' 
                         END 
    

    しかし、それはあなたがそれらを書いたようには機能しません。例:

    WHERE 
        CASE LEN('TestPerson')
            WHEN 0 THEN co.personentered  = co.personentered
       ELSE co.personentered LIKE '%TestPerson'
        END 
    

    次のようなORステートメントを組み合わせて使用​​すると幸運が訪れるかもしれません:

    WHERE (
            (LEN('TestPerson') = 0 
                 AND co.personentered = co.personentered
            ) 
            OR 
            (LEN('TestPerson') <> 0 
                 AND co.personentered LIKE '%TestPerson')
          )
    

    ただし、どちらの方法でも、クエリプランがどれほど優れているかはわかりません。 WHEREにあるこれらのタイプのシェナニガン 句は、クエリオプティマイザがインデックスを利用できないようにすることがよくあります。



    1. PostgreSQLのクエリエラーによって結果が返されません

    2. string_agg()からの結果をソートする方法

    3. 事前入力されたデータベースの更新

    4. MariaDBでのPERIOD_DIFF()のしくみ