【发布时间】:2018-06-19 21:48:52
【问题描述】:
我需要过滤掉表中 numer_lini 列中有数字并且介于 100 和 999 之间的行,当我注释掉我将 marsnr 转换为整数的行时,下面的代码工作得很好。但是,当我尝试使用它时,出现错误:在函数“INTEGER”的字符串参数中发现无效字符。当查看列表时,似乎只替换和翻译过滤器的数字就好了,选择只包含合法数字(唯一值列表不长,因此很容易用肉眼扫描)。那么为什么它无法投射东西呢?我也尝试使用整数(marsnr),但它会产生相同的错误。我需要强制转换,因为我需要数字范围,否则我会得到 7,80 等结果。正如我提到的,我使用的是 IBM DB2 数据库。
select numer_lini, war_trasy, id_prz1, id_prz2
from alaska.trasa
where numer_lini in (
select marsnr
from (
select
distinct numer_lini marsnr
from alaska.trasa
where case
when replace(translate(numer_lini, '0','123456789','0'),'0','') = ''
then numer_lini
else 'no'
end <> 'no'
)
where cast(marsnr as integer) between 100 and 999
)
fetch first 300 rows only
【问题讨论】:
-
我对db2不熟悉,但是
7,80不是整数。我可以想象您需要指定如何转换真正的十进制值。 -
不,不,我的意思是我得到的两个示例数字,它是两个整数 7 和 80。
-
能否请您发布 DESCRIBE TABLE alaska.trasa
-
如果
numer_lini中的任何一个是空字符串,就会发生这种情况。