PostgreSQL中内部联接上的子字符串

PostgreSQL中内部联接上的子字符串,postgresql,Postgresql,我的一张桌子如下所示- 表中的一列ordertype的数据开头总是有4个字符,其余字符用分隔符分隔;字符的长度随时间的变化而变化 我正在尝试使用子字符串来拖拽后面的所有字符;(分号)与长度无关。同时,我也在尝试执行一个内部连接。内部联接中的子字符串旨在提取前4个字符 由于某种原因,我的查询出错了。不确定我是否做错了什么 下面是我尝试运行的示例查询- SELECT ind_id, substring(ordertype FROM 6) FROM order_table I

我的一张桌子如下所示-

表中的一列ordertype的数据开头总是有4个字符,其余字符用分隔符分隔;字符的长度随时间的变化而变化

我正在尝试使用子字符串来拖拽后面的所有字符;(分号)与长度无关。同时,我也在尝试执行一个内部连接。内部联接中的子字符串旨在提取前4个字符

由于某种原因,我的查询出错了。不确定我是否做错了什么

下面是我尝试运行的示例查询-

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,这真的很有帮助。