DB2: как устранить ошибку decfloat для десятичного столбца? - PullRequest
1 голос
/ 07 апреля 2020

При попытке выполнить запрос ниже получаю ошибку decfloat. В соответствии с ddl DX.FACT_RULES доход от таблицы является десятичным (18,2)

ВЫБРАТЬ ВЫХОД ИЗ DX.FACT_RULES

Пожалуйста, помогите мне с решением.

Я пытался изменить как CAST (ДОХОД как DECFLOAT (32)), а также CAST (DECFLOAT (REVENUE) AS DECIMAL (18,2)) до сих пор не используется

1 Ответ

1 голос
/ 07 апреля 2020

Likley, вы получаете эту ошибку

db2 "values '£101' * 1"

1                                         
------------------------------------------
SQL0420N  Invalid character found in a character string argument of the 
function "DECFLOAT".  SQLSTATE=22018

, которая появляется при обработке строки как числа, но строка не может быть преобразована в число (в данном случае DECFLOAT)

Вам нужно найти значения, которые нельзя преобразовать в число. Такая функция может использоваться для поиска таких значений

CREATE OR REPLACE FUNCTION DB_IS_DECFLOAT(i VARCHAR(64)) RETURNS INTEGER
    CONTAINS SQL ALLOW PARALLEL 
    NO EXTERNAL ACTION
    DETERMINISTIC
BEGIN 
  DECLARE NOT_VALID CONDITION FOR SQLSTATE '22018';
  DECLARE EXIT HANDLER FOR NOT_VALID RETURN 0;

  RETURN CASE WHEN CAST(i AS DECFLOAT) IS NOT NULL THEN 1 END;
END

например,

SELECT v
FROM TABLE(VALUES ('£123'),(' +123.45 ')) as t(V)
WHERE DB_IS_DECFLOAT(v) = 0

, которые возвращали бы

V   
----
£123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...