我们有一个存储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。
答案 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上进行了右边修剪。不确定一种方式是否优于另一种方式。