检查字符列是否包含 DB/2 和 sql 中的数值

Check if character column contains numeric value in DB/2 with sql

我们有一个存储 db/2 的 AS400,我正在尝试加入一个 table,其中字符列包含数字列的值。

我 运行 在 visual studio 中使用它,我尝试了 cast(val as char) 并收到了无法识别的 'as',我尝试了 CONVERT,然后也不被认可。这是我的原始查询:

SELECT        *
FROM           tab e, tab n
WHERE        (e.LN = 0001) AND (n.RMK LIKE '%' + e.ORDNO)

n.RMK 包含一个一致但类似于 "ordr 1401" 的字符值,然后 e.ORDNO 包含一个数值,即 1401

我想看看 e.RMK 是否包含 e.ORDNO 中的 1401 值。

当我 运行 该查询时,我得到一个 Errot type 6 = Numeric data that is not valid 错误。所以我想我会尝试将数值转换为 char,然后再试一次。

像这样,

SELECT        *
FROM           tab e, tab n
WHERE        (e.LN = 0001) AND  n.RMK  LIKE '%' + cast(e.ORDNO as  varchar(10))

这没有用,

我也试过了

n.RMK LIKE '%' + CONVERT(VARCHAR(10), e.ORDNO) 并且我无法识别 CONVERT。

首先,最佳做法是使用显式联接。

其次,CAST (fld AS CHAR) 应该可以工作,尽管它默认为 CHAR(1)。你可能需要更多。

第三,假设前缀总是 "ordr " 我会使用 SUBSTR()

SELECT *
FROM tab e 
     JOIN tab n ON n.rmk = INT(SUBSTR(e.ordno,6))
WHERE e.ln = 1

终于找到了可行的解决方案,尽管它可能不是最好的:

 SELECT        *
 FROM           tab e, tab n
 WHERE        (e.LN = 0001) AND  (n.RMK LIKE CONCAT(RTRIM(CONCAT('%', CHAR(e.ORDNO))), '%'))

出于某种原因,使用 CHAR 在 e.ORDNO 字符串的末尾添加了空格,并且在 RMK 字符串的末尾也有空格;并且通配符搜索将不起作用,除非我在 e.ORDNO 前面加上 '%' 或我在 n.RMK 和 e.ordno 上都做了正确的 trim。不确定一种方法是否比另一种更好。