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

时间:2016-03-16 13:49:53

标签: sql db2 ibm-midrange

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

我在视觉工作室中运行这个,我尝试了演员(val作为字符),然后收到' as'我没有被承认,我试过 WITH cte AS ( SELECT ClientId FROM [Table] WHERE TypeId = 1 ) SELECT ClientId FROM cte EXCEPT SELECT CLientId FROM [Table] WHERE TypeId = 3 ,但也没有认出来。这是我原来的疑问:

<button ng-repeat="tech in techniques" class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">{{tech.programmes}}
    <span class="caret"></span>
</button>

<!-- tech does not existe anymore-->
<ul ng-repeat="doc in tech.documents" class="dropdown-menu">
    <a href="../{{doc.contenu}}" ng-cloak>{{doc.menuTag}}</a></li>
</ul>

n.RMK包含的字符值是一致的,但类似于&#34; ordr 1401&#34;然后e.ORDNO包含一个数值1401

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

当我运行该查询时,我得到一个Errot类型6 =无效错误的数字数据。所以我想我会尝试将数值转换为char并再试一次。

像这样,

CONVERT

这不起作用,

我也试过

SELECT * FROM tab e, tab n WHERE (e.LN = 0001) AND (n.RMK LIKE '%' + e.ORDNO) 我无法识别CONVERT。

2 个答案:

答案 0 :(得分:0)

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

其次,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

答案 1 :(得分:0)

最后得到了一个有效的解决方案,虽然它可能不是最好的:

 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上进行了右边修剪。不确定一种方式是否优于另一种方式。