检查字符列是否包含 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。不确定一种方法是否比另一种更好。
我们有一个存储 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。不确定一种方法是否比另一种更好。