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

isnull vs null

    where isnull(name,'') <> ''
    

    と同等
    where name is not null and name <> '' 
    

    これは

    と同等です
    where name <> ''
    

    (名前 IS NULL の場合 その最終式は不明と評価され、行は返されません)

    ISNULL の使用 以下のテストでわかるように、パターンはスキャンになり、効率が低下します。

    SELECT ca.[name],
           [number],
           [type],
           [low],
           [high],
           [status]
    INTO   TestTable
    FROM   [master].[dbo].[spt_values]
           CROSS APPLY (SELECT [name]
                        UNION ALL
                        SELECT ''
                        UNION ALL
                        SELECT NULL) ca 
    
    
    CREATE NONCLUSTERED INDEX IX_TestTable ON dbo.TestTable(name)
    
    GO
    
    
    SELECT name FROM TestTable WHERE isnull(name,'') <> ''
    
    SELECT name FROM TestTable WHERE name is not null and name <> ''
    /*Can be simplified to just WHERE name <> '' */
    

    これにより、必要な実行計画が得られます。



    1. OracleSQLDeveloperでSYSとしてデータベースにログインできません

    2. パスワードにsqlplusと特殊文字を含むシェルスクリプト

    3. varchar で「 between 」を使用する (SQL サーバー)

    4. Oracle:AFTER ALTERトリガーでオブジェクトの新しい名前を判別するにはどうすればよいですか?