使用concat和子字符串进行SQL连接
所以我尝试做一个连接,它需要CONCAT和SUBSTRING 表1有一列,列上有日期和位置,例如“02:00 IND” 表2有一列显示日期/时间,例如“2020-10-10 02:00:00.000000”,另一列显示位置,例如“IND” 这是我正在尝试但不起作用的声明:使用concat和子字符串进行SQL连接,sql,join,substring,concat,Sql,Join,Substring,Concat,所以我尝试做一个连接,它需要CONCAT和SUBSTRING 表1有一列,列上有日期和位置,例如“02:00 IND” 表2有一列显示日期/时间,例如“2020-10-10 02:00:00.000000”,另一列显示位置,例如“IND” 这是我正在尝试但不起作用的声明: SELECT * FROM FIRST_TABLE INNER JOIN SECOND_TABLE on FIRST_TABLE.TIME_LOCATION = CO
SELECT *
FROM FIRST_TABLE
INNER JOIN SECOND_TABLE on FIRST_TABLE.TIME_LOCATION =
CONCAT(SUBSTRING(SECOND_TABLE.TIME,12,5) , SECOND_TABLE.LOCATION);
我收到以下错误:
[SQL0171]函数的参数1
子字符串无效。原因……:数据类型、长度或值
指定的函数子字符串的参数1的值无效。恢复。
. . : 请参阅中的DB2forIBMiSQL参考主题集合
有关详细信息,请参阅IBM i信息中心中的数据库类别
关于标量函数。更正为函数指定的参数。
请重试请求
在连接子字符串时将没有空间 它将如下所示: 02:00IND
我猜它只是返回了一个空白结果,因为您没有提到它返回了一个错误:)如果有人遇到类似问题,我会让它工作。我是SQL的初学者,所以我不知道这是否有用,我相信有更好的方法 无论如何,我的问题是数据类型不兼容。我将时间戳转换为时间,这给我留下了“HH.MM.SS”格式。在那之后,我不得不将它转换成一个NVARCHAR来生成一个排除秒数的子字符串。然后我必须将“.”替换为“:”,以使值匹配。这是一个很大的工作,但我明白了
SELECT *
FROM FIRST_TABLE
INNER JOIN SECOND_TABLE on FIRST_TABLE.TIME_LOCATION =
CONCAT(CONCAT(REPLACE(SUBSTRING(CAST(TIME(SECOND_TABLE.TIME)AS NVARCHAR(8)), 1, 5),
'.', ':'), ' '), DSP134.LSDTID);
哦,是的,我用的是'',我只是忘了把它放在那里。我收到错误消息[SQL0171]函数子字符串的参数1无效。原因……:指定的函数子字符串的参数1的数据类型、长度或值无效。恢复…:有关标量函数的更多信息,请参阅IBMi信息中心数据库类别中的DB2forIBMiSQL参考主题集合。更正为函数指定的参数。请重试该请求。这3个字段的数据类型是什么?请在代码问题中给出一个--cut&paste&runnable代码,包括作为代码输入的最小代表性示例;期望和实际输出(包括逐字记录错误消息);标签和版本;清晰的说明和解释。尽可能少地给出代码,即显示为OK的代码,并通过显示为not OK的代码进行扩展。(调试基础。)用于包含DBMS和DDL(包括约束和索引)的SQL,并以表格式作为代码输入。暂停总体目标的工作,在第一个表达中删去代码,不要给出你的期望,说出你的期望以及为什么。这是一个常见问题解答。在考虑发帖之前,请先阅读您的课本和/或手册,并在谷歌上搜索任何错误消息或您的问题/问题/目标的许多清晰、简洁和准确的措辞,包括或不包括您的特定字符串/名称和网站:stackoverflow.com&tags;阅读许多答案。反思你的研究。请参见文本上方的投票箭头(&S)。如果你发布一个问题,用一句话作为标题。除非我们努力(重新)写清楚,否则我们无法推理、交流或搜索。