PostgreSQL中内部联接上的子字符串
我的一张桌子如下所示- 表中的一列ordertype的数据开头总是有4个字符,其余字符用分隔符分隔;字符的长度随时间的变化而变化 我正在尝试使用子字符串来拖拽后面的所有字符;(分号)与长度无关。同时,我也在尝试执行一个内部连接。内部联接中的子字符串旨在提取前4个字符 由于某种原因,我的查询出错了。不确定我是否做错了什么 下面是我尝试运行的示例查询-PostgreSQL中内部联接上的子字符串,postgresql,Postgresql,我的一张桌子如下所示- 表中的一列ordertype的数据开头总是有4个字符,其余字符用分隔符分隔;字符的长度随时间的变化而变化 我正在尝试使用子字符串来拖拽后面的所有字符;(分号)与长度无关。同时,我也在尝试执行一个内部连接。内部联接中的子字符串旨在提取前4个字符 由于某种原因,我的查询出错了。不确定我是否做错了什么 下面是我尝试运行的示例查询- SELECT ind_id, substring(ordertype FROM 6) FROM order_table I
SELECT
ind_id,
substring(ordertype FROM 6)
FROM
order_table
INNER JOIN
transaction_table
ON
transaction_table.fileid = order_table.substring(ordertype FROM 1 FOR 4;
SQL中的函数通常不作为其作用对象的谓词调用。相反,我们将数据库对象传递给函数。请尝试以下版本:
SELECT
ind_id,
SUBSTRING(o.ordertype FROM 6)
FROM order_table o
INNER JOIN
transaction_table t
ON t.fileid = SUBSTRING(o.ordertype FROM 1 FOR 4); -- chamge is here
请注意,这里可能更可靠的解决方案是使用SPLIT\u PART
功能:
SELECT
ind_id,
SPLIT_PART(o.ordertype, ';', 2)
FROM order_table o
INNER JOIN
transaction_table t
ON t.fileid = SPlIT_PART(o.ordertype, ';', 1);
事实上,Postgres可以像调用方法一样调用行类型上的函数,但这是不常见的,不能处理这里的字符串。谢谢@Tim,这真的很有帮助。