79
SELECT IFNULL(NULL, 'Replaces the NULL')
--> Replaces the NULL

SELECT COALESCE(NULL, NULL, 'Replaces the NULL')
--> Replaces the NULL

両方の句の主な違いは、引数の受け渡しです。それIFNULLは2つのパラメーターであり、COALESCE複数のパラメーターです。それを除いて、これら2つの間に他に何か違いはありますか?

また、MS SQL ではどのように異なるのでしょうか?

4

5 に答える 5

25

の長所COALESCE

  • COALESCEは SQL 標準関数です。

    WhileIFNULLは MySQL 固有であり、MSSQL ( ISNULL) 内の同等のものは MSSQL 固有です。

  • COALESCE2 つ以上の引数を使用できます(実際、1 つの引数を使用することもできますが、この場合はほとんど役に立ちません: COALESCE(a)≡<code>a)。

    MySQLIFNULLと MSSQLISNULLは の限定バージョンですがCOALESCE、2 つの引数のみで動作します。

の短所COALESCE

  • Transact SQL のドキュメントによると、COALESCEこれは単なる構文糖衣でCASEあり、その引数を複数回評価できます。より詳細には: COALESCE(a1, a2, …, aN)≡<code>CASE WHEN (a1 IS NOT NULL) THEN a1 WHEN (a2 IS NOT NULL) THEN a2 ELSE aN END. COALESCEこれにより、MSSQLでの の有用性が大幅に低下します。

    一方、ISNULLMSSQL では通常の関数であり、その引数を複数回評価することはありません。COALESCEMySQL と PostgreSQL では、どちらもその引数を複数回評価します。

  • 現時点では、SQL 標準がどのように正確に を定義しているかわかりませんCOALESCE

    前のポイントからわかるように、RDBMS での実際の実装はさまざまです。COALESCE引数を複数回評価するもの (MSSQL など) もあれば、そうでないもの (MySQL、PostgreSQL など) もあります。

    その実装が SQL-92 互換であると主張するCOALESCEc-treeACE は、次のように述べています。これらの制限が本当に SQL 標準内にあるかどうかはわかりません。ほとんどの実際の実装COALESCE(MySQL、PostgreSQL など) には、このような制限はありません。IFNULL/ ISNULL、通常の関数として、そのような制限もありません。

履歴書

COALESCE特定のRDBMS で特定の制限に直面しない限り、常にCOALESCEより標準的で汎用的なものとして使用することをお勧めします。

例外は次のとおりです。

  • MSSQL で長時間計算された式または副作用のある式 (ドキュメントによると、 2 回COALESCE(expr1, …)評価される場合があるためexpr1)。
  • GROUP BYc-treeACE のクエリ式内またはクエリ式と共に使用します。
  • 等。
于 2017-04-04T11:18:30.297 に答える
4

SQL-Server の違い:

  • 機能はありませんIFNULL()が、同様のISNULL()

  • ISNULLCOALESCE は可変数のパラメータを取るのに対し、パラメータは 2 つしか取らない

  • COALESCEANSI SQL標準に基づいていますISNULLが、独自のTSQL関数です

  • ISNULLとの検証COALESCEも異なります。たとえば、NULLfor の値ISNULLは int に変換されますが、 forCOAELSCEは型を指定する必要があります。元:

    • ISNULL(NULL,NULL): は整数です。

    • COALESCE(NULL,NULL): エラーがスローされます。

    • COALESCE(CAST(NULL as int),NULL): は有効で、int を返します。

  • 結果の式のデータ型の決定 –ISNULL最初のパラメーターの型を使用し、式の規則COALESCEに従い、CASE優先順位が最も高い値の型を返します。

于 2013-08-30T08:43:00.273 に答える