【发布时间】:2025-12-25 20:20:17
【问题描述】:
我有一个 SQL 解决方案,可以分别从 2 个表(QUOTES 和 CLIENTS)中的 contractnumber# 检索类似的 quotenumber#。这在 Internet 上的任何 SQL Fiddle 中都可以正常工作。请参阅下面的所有 SQL 来创建解决方案(我添加了创建和插入表语句只是为了方便 SELECT 语句工作):
CREATE TABLE QUOTES
(`quotenumber` varchar(10));
INSERT INTO QUOTES
(`quotenumber`)
VALUES
('10006'),
('10007'),
('10008'),
('10009');
CREATE TABLE CLIENTS
(`contractnumber` varchar(21));
INSERT INTO CLIENTS
(`contractnumber`)
VALUES
('PRXQTE-10006'),
('PRXQTE-10007'),
('FRR-13'),
('JK1222222'),
('X'),
('');
这是 SELECT 语句:
SELECT H.quotenumber
FROM QUOTES as H
INNER JOIN CLIENTS as P
ON P.contractnumber LIKE CONCAT('%', H.quotenumber, '%');
但是,当我在 IBM I 环境中运行此 SQL 时,此 SELECT 语句不起作用。例如,当我尝试在 IBM I Access Client Solution 的 sql 编辑器中运行下面的 SELECT 语句时,我收到此错误:
SQL 状态:42605 供应商代码:-170 消息: [SQL0170] 数量 函数 CONCAT 的参数无效。原因 。 . . . . : 一种 函数指定的参数数量不正确。如果 这个函数是一个用户定义的函数引用,一个 使用当前路径未找到具有此签名的函数。 恢复 。 . . : 更正为 功能。请参阅 DB2 for IBM i SQL 参考主题集合 在 IBM i 信息中心的数据库类别中 功能信息。如果这是用户定义的函数,请更正 路径或函数签名。再次尝试请求。
有谁知道这个 SELECT 语句的 DB2 改编版本或者 IBM i 可以使用什么替代方法?
【问题讨论】:
-
您可以使用dbfiddle.uk/?rdbms=db2_11.1 作为 DB2 测试平台。
-
谢谢戈登。你知道我一直在寻找 db2 fiddle。谢谢
-
。 .我唯一要注意的是,DB2 的变体似乎与 Sybase 的变体一样多。因此,对于基础知识(例如您的问题)应该没问题,但可能与您的实际数据库有所不同。