Sql 如何在db2上返回类似的值?

Sql 如何在db2上返回类似的值?,sql,db2,Sql,Db2,我有一个Trace\u编号,标记为跟踪类型“B”,由供应商提供给我 无论何时我们提取他们的负载,我们都会让我们的驱动程序输入一个跟踪编号,该编号作为跟踪类型进入我们的数据库 有时,在我们的驾驶员收到的文件上,跟踪编号值可能有一个前导编号,或者后面可能有一个额外的编号,因此标记为不匹配 我需要一个函数来定位跟踪类型S中跟踪类型B的值 这就是我现在拥有的 SELECT UNIQUE BILL_NUMBER, TRACE.TRACE_NUMBER, TRACE_TYPE FROM TLORDER I

我有一个
Trace\u编号
,标记为
跟踪类型“B”
,由供应商提供给我

无论何时我们提取他们的负载,我们都会让我们的驱动程序输入一个
跟踪编号
,该编号作为
跟踪类型进入我们的数据库

有时,在我们的驾驶员收到的文件上,跟踪编号值可能有一个前导编号,或者后面可能有一个额外的编号,因此标记为不匹配

我需要一个函数来定位跟踪类型S中跟踪类型B的值

这就是我现在拥有的

SELECT UNIQUE BILL_NUMBER, TRACE.TRACE_NUMBER, TRACE_TYPE FROM TLORDER 
INNER JOIN TRACE ON DETAIL_LINE_ID = DETAIL_NUMBER 
WHERE BILL_TO_CODE = 'IPMILLOUT' AND TRACE_TYPE IN ('S','B') 
AND EXISTS (SELECT 1 FROM TRACE T WHERE DETAIL_NUMBER = DETAIL_LINE_ID AND TRACE_TYPE = 'B' 
AND TRACE_NUMBER = (SELECT RIGHT(T2.TRACE_NUMBER,10) FROM TRACE T2 WHERE T2.DETAIL_NUMBER = T.DETAIL_NUMBER AND TRACE_TYPE = 'S'))
预期的结果是

Trace B      Trace S 
1234567890 = 000012345678901 (ACCEPT) 
1567123945 = 124515671239453 (ACCEPT)
9846504684 = 314254565468923 (NOT ACCEPT) 
不接受的原因是从跟踪类型S中找不到9846504684的字符串

但是,accept是因为可以在S上找到跟踪类型B中的字符串

先谢谢你

试试这个:

SELECT UNIQUE BILL_NUMBER, TRACE.TRACE_NUMBER, TRACE_TYPE FROM TLORDER 
INNER JOIN TRACE ON DETAIL_LINE_ID = DETAIL_NUMBER 
WHERE BILL_TO_CODE = 'IPMILLOUT' AND TRACE_TYPE IN ('S','B') 
AND EXISTS (SELECT 1 FROM TRACE T WHERE DETAIL_NUMBER = DETAIL_LINE_ID AND  
TRACE_TYPE = 'B' 
AND char(T.TRACE_NUMBER) = (SELECT char(substr(char(T2.TRACE_NUMBER),posstr(char(T2.TRACE_NUMBER),char(T.TRACE_NUMBER)),10)) FROM TRACE T2 WHERE  
T2.DETAIL_NUMBER = T.DETAIL_NUMBER AND TRACE_TYPE = 'S'))

更多的示例和结果将真正有助于传达您想要做的事情。对不起,戈登!我添加了更多示例如何将数字强制转换为字符,然后将其与“%TraceB%”之类的跟踪进行比较?结果并不像预期的那样。。。只返回精确匹配。有一个
LOCATE
函数用于在另一个字符串中查找一个字符串。您。。。找到字符串的位置以便提取它并将其与搜索字符串进行比较?为什么不直接使用
EXISTS
并避免大约一半的行?虽然最初的语句有更严重的问题…但我返回了一条错误消息。“LIKE谓词或POSSTR标量函数无效,因为第一个操作数不是字符串表达式,或者第二个操作数不是字符串。SQL STATE=42824”