3

私はMYSQLと明らかに他のデータベースエンジンで、最大(1、2、3、4)のように使用できる「最大の」関数があることを発見しました。これは4を返します。これが必要ですが、IBMのDB2を使用しています. 2つのパラメーターしか受け入れない場合でも、そのような同等の関数を知っている人はいますか?

MAX がそれを行うべき場所を見つけましたが、機能しません...列の MAX を選択する場合にのみ機能します。

そのような関数がない場合、これを行うためのストアド プロシージャがどのように見えるかを誰か知っていますか? (私はストアード・プロシージャーの経験がないので、DB2 で何ができるかわかりません)。

4

6 に答える 6

6

MAXがうまくいかないのはなぜですか?

sysibm.sysdummy1 から max(1,2,8,3,1,7) を選択

私にくれます

    1
    ---------------
                 8

      1 record(s) selected.
于 2008-10-24T19:12:24.487 に答える
4

Daveが指摘しているように、MAXは、スカラー関数と列関数の両方としてオーバーロードされているため、機能するはずです(スカラーは2つ以上の引数を取ります)。これは、DB2 for LUW、DB2 for z / OS、およびDB2 for i5/OSの場合です。使用しているDB2の正確なバージョンとプラットフォーム、および使用している正確なステートメントは何ですか?MAXのスカラーバージョンの要件の1つは、すべての引数が「互換性がある」ことです。関数に渡す1つ以上の引数に微妙な型の違いがあるのではないかと思います。

于 2008-10-29T16:29:36.020 に答える
2

Linux V9.1 では、「select max (1,2,3) ...」は -

SQL0440N 互換性のある引数を持つタイプ "FUNCTION" の "MAX" という名前の許可ルーチンが見つかりませんでした。SQLSTATE=42884

これは、単一の値または単一の列名を必要とするスカラー関数です。z/os では、動作が異なります。

ただし、Linux 9.5 では期待どおりに動作します。

于 2008-12-31T14:41:14.433 に答える
1

2 つのオプション:

  1. 列を降順に並べ替えて、先頭の 1 行を取得するのはどうでしょうか。

  2. 私の「SQL ポケット ガイド」によると、MAX(x) はセット内で最大の値を返します。

更新:列を見ている場合、明らかに#1は機能しません。

于 2008-10-24T19:05:21.273 に答える
1

ばかげているように聞こえますが、少なくともバージョン 9.1 では、DB2 にはそのような関数は存在しません。2 つの列のうち大きい方を選択する場合は、case 式を使用するのが最適です。

独自の max 関数を定義することもできます。例えば:

create function importgenius.max2(x double, y double)
returns double
language sql
contains sql
deterministic
no external action
begin atomic
    if y is null or x >= y then return x;
    else return y;
    end if;
end

入力と出力を double として定義すると、型の昇格を利用できるため、この関数は整数に対しても機能します。"deterministic" および "no external action" ステートメントは、データベース エンジンが関数の使用を最適化するのに役立ちます。

文字入力に対して別の max 関数を機能させたい場合は、別の名前を付ける必要があります。

于 2009-03-10T21:31:26.823 に答える