使用concat和子字符串进行SQL连接

使用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

所以我尝试做一个连接,它需要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 = 
       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)。如果你发布一个问题,用一句话作为标题。除非我们努力(重新)写清楚,否则我们无法推理、交流或搜索。