Функция max Null против Nullif (1, 1) в качестве аргументов в db2 - PullRequest
1 голос
/ 23 марта 2012

Я тестировал функцию db2 max, чтобы увидеть, выбирает ли она NULL как максимум из списка нулей.

Итак, я выполнил этот запрос:

SELECT max (a.colname)
FROM (SELECT null AS colname FROM <replace with any small table name>) a

Это, однако, выдал это сообщение об ошибке:

DB2 Database Error: ERROR [428F5] [IBM][DB2/AIX64] SQL0245N  The invocation of routine "MAX" is ambiguous. The argument in position "1" does not have a best fit.  SQLSTATE=428F5

Я смог проверить, что я должен был сделать, заменив null на nullif(1,1), и он действительно вернет null как максимальное значение всписок null значений.

В соответствии с этим page состояние sql означает, что функция max имеет различные, скажем, реализации или перегрузки, которые могут обрабатывать аргумент a.colname, иотсюда и ошибка.

Я не уверен, где можно найти больше информации о реализации функции max в db2, поскольку страница IBM ничего об этом не говорит.

Есть идеи о том, как нуль и нуль отличаются по своему типу, особенно в контексте функции max?

1 Ответ

3 голосов
/ 23 марта 2012

Вам необходимо выбрать тип данных для этого столбца, попробуйте это:

SELECT max (a.colname)
FROM (SELECT CAST(null AS INT) AS colname FROM <replace with any small table name>) a

В вашем первом запросе MAX не знает тип данных для этого столбца. Во втором запросе это назначение типа данных на основе входных данных (в данном случае 1), поэтому можно сказать, что это INT, поэтому он может вычислить MAX.

...