1

Transact-SQL を使用して Microsoft SQL Server 2005 に取り組んでいます。

NULL 値を扱う同じテーブルの異なる列からの文字列値を連結しようとしています。

たとえば、テーブルがPersonで、列がFirstNameSurnamePrefixLegalSurname

文字列値と NULL 値 (2 つの異なる列から取得) を連結すると、出力に NULL 値が返されることがありました。出力の NULL 値を防ぐために、さまざまなシナリオを試しました。

  • から始まる:
    • Person.FirstName + ' ' + COALESCE(RTRIM(LTRIM(Person.SurnamePrefix)) + ' ', '') + Person.LegalSurname
  • ステートメントを次のように変更しました。
    • COALESCE(Person.FirstName + ' ', '') + COALESCE(Person.SurnamePrefix, '') + COALESCE(' ' + Person.LegalSurname, '')

ISNULL()その後、NULLIF()などの関数に出くわしました。

NULL 値ではなく空の文字列値を出力に表示するための最良かつ効率的な方法はどれですか? ソリューションは SQL Server のバージョンの影響を受けますか? (つまり、2005 年、2008 年など)

4

3 に答える 3

2

ISNULLあなたがやっているように、デフォルト値に適しています。 COALESCE2 つ以上の引数を受け入れるという利点があります。 引数が等しい場合NULLIFは a を返すため、かなり異なります。NULL

それらのパフォーマンスをベンチマークできます。違いはごくわずかであり、コードの明確さを選択することがはるかに重要であると思います.

于 2012-08-09T12:34:04.433 に答える
1

Aaron Bertrandは、この 2 つを比較 COALESCEISNULLましたが、パフォーマンスに大きな違いはありませんでした。

于 2012-08-09T16:45:50.663 に答える
1

これはあなたの質問に対する直接的な回答ではありませんが、SQL Server の将来のバージョンでは廃止されますが、SQL 2005 ではCONCAT_NULL_YIELDS_NULL接続レベルで開始できます。(コマンドを使用してデータベース レベルで設定することもできますALTER DATABASEが、これは既存のクエリの動作に影響を与える可能性があります)。クエリを実行する前にこれを設定できます。

SET CONCAT_NULL_YIELDS_NULL OFF

SELECT 'a' + NULL

結果が得られます

a

保守性の観点からは、これを避ける方が良いかもしれません - 不注意な人を混乱させるでしょう - しかし、それはあなたが今やっていることの別の代替手段です.

于 2012-08-09T12:40:18.767 に答える