db2 使用Regex的SQL中出现数值数据无效错误

3qpi33ja  于 2023-05-22  发布在  DB2
关注(0)|答案(1)|浏览(193)

我有下面的SQL,在执行时抛出“Numeric data not valid”错误:

SELECT WORKKEY , WRKTITLE, INT(SUBSTR(WRKTITLE , 26, 8) ) 
FROM IACDTAA.IACWTL
WHERE 
REGEXP_LIKE(TRIM(WRKTITLE), '^[0-9]{1,4} ARTX LU 079 PUBLDTE=[0-9]{8}       A$')
AND WORKKEY IN (SELECT WORKKEY FROM IACDTAA.IACNTC WHERE NTFCTLKEY = 195586   )
AND INT(SUBSTR(WRKTITLE , 26, 8) ) > 0 ;

问题似乎是比较条件INT(SUBSTR(WRKTITLE , 26, 8) ) > 0
基本上,正则表达式试图找出WRKTITLE字段具有以下值的记录:

0048 ARTX LU 079 PUBLDTE=19880708       A                                                 
0060 ARTX LU 079 PUBLDTE=20120101       A

但在我看来,SQL实际上选择了WRKTITLE不是这种格式的记录,这导致INT函数被应用于“非数字”值。
这里会出什么问题?

mwngjboj

mwngjboj1#

好吧,所以似乎有一些关于铸造的东西,我不知道,但下面的工作:

SELECT WORKKEY , WRKTITLE, SUBSTR(WRKTITLE , 26, 8) 
FROM IACDTAA.IACWTL
WHERE 
REGEXP_LIKE(TRIM(WRKTITLE), '^[0-9]{4} ARTX LU 079 PUBLDTE=[0-9]{8}[ ]{7}A$')
AND WORKKEY IN (SELECT WORKKEY FROM IACDTAA.IACNTC WHERE NTFCTLKEY = 195586   )
AND SUBSTR(WRKTITLE , 26, 8) > '0'

不需要转换成INT,只需要使用char值进行简单的比较就可以了!现在如果有人能指出原因,那就太好了!

相关问题