DB2:[错误代码:-802,SQL状态:22023] [SQL0802]

时间:2012-04-03 11:32:25

标签: db2 decimal

从葡萄牙语翻译成英语时出错:“错误数据转换或数据格式转换。”

我创建了一个视图:

MNUM DECIMAL 8,0                                


create view db.abc as select * from x where decimal(SUBSTR(MNUM, 2,6), 6, 0) = 57092

在这个例子中,mnum看起来像1057092,SUBSTR(MNUM,2,6)= 057092和十进制(SUBSTR(MNUM,2,6),6,0)应该是= 57092但是抛出该错误!

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您可以使用MOD函数获取数字的一部分,而不是使用字符和数字操作挣扎

select decimal(SUBSTR(12345678, 2,6), 6, 0)
from sysibm.sysdummy1;
--returns 234567

select mod(12345678 / 10, 1000000)
from sysibm.sysdummy1;
--returns 234567

它们返回相同的结果,但最后一个只能应用于数字操作。并且,如果您确保将您的数字保护为6位小数,则可以执行此操作(如果您的DB2版本允许):

select digits(dec(mod(12345678 / 10, 1000000), 6))
from sysibm.sysdummy1;

为了确保您的操作可以正常工作,您应该评估MNUM值是否为空:

digits(dec(mod(COALESCE(MNUM, 0) / 10, 1000000), 6))

答案 1 :(得分:0)

SUBSTR函数对字符串起作用,而不是十进制数。

我不知道你正在使用哪个版本的DB2,但你可以试试这个:

DECIMAL(SUBSTR(CAST(MNUM AS CHAR(10)), 2, 6), 6, 0)

“10”包括数字8个字符,小数点1个,符号1个。