从葡萄牙语翻译成英语时出错:“错误数据转换或数据格式转换。”
我创建了一个视图:
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但是抛出该错误!
感谢您的帮助
答案 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个。