【问题标题】:SUBSTRING on an Inner Join in PostgreSQLSUBSTRING 在 PostgreSQL 中的内部连接上
【发布时间】:2020-01-16 18:28:31
【问题描述】:

我的一张表如下所示-

表中的其中一列 ordertype 的数据开头总是有 4 个字符,然后其余字符用 ; 分隔。 ;之后的字符长度不同

我正在尝试使用 SUBSTRING 拉出 ; 之后的所有字符(分号)不管它们的长度。也尝试为我尝试执行的 INNER JOIN 执行此操作。 INNER JOIN 中的子字符串旨在提取前 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;

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    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_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,这真的很有帮助。
    猜你喜欢
    • 2019-12-18
    • 2014-08-25
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 2016-06-24
    • 1970-01-01
    • 2014-12-24
    • 2012-12-09
    相关资源
    最近更新 更多