如何在PSQL中从某个字符串单元格创建整数

时间:2016-10-24 10:16:58

标签: sql postgresql

我正在尝试查询的表中有三个特定的列,比如ID(char),Amount(bigint)和Reference(char)。以下是此表中几个条目的示例。前两行在第三列中没有条目。

ID   | Amount |  Reference
16266|   24000|
16267|  -12500|
16268|   25000| abc:185729000003412
16269|   25000| abc:185730000003412

我想要的是一个查询或函数,它将返回重复行的ID,这些行具有与参考列中字符串中的数字相同的数量和相同的模数(%100000000)。

我感兴趣的参考栏中的唯一单元格在整数之前都有'abc:',而在数字之后没有任何内容。我需要一些方法将最终字段(字符串)转换为int,以便我可以搜索该数字的模数

一旦我将参考字段转换为没有'abc:'的数字,我将运行的脚本

CREATE TEMP TABLE tableA (
id int,
amount int,
referenceNo bigint)

INSERT INTO tableA (id, amount, referenceNo) SELECT id, net_amount, longnumber%100000000 AS referenceNo FROM deposit_item

SELECT DISTINCT * FROM tableA WHERE referenceNo > 1 AND amount > 1

基本上,如何将参考字段(abc:185729000003412)转换为PSQL中的整数(185729000003412或3412)?

1 个答案:

答案 0 :(得分:2)

假设引用ID始终由:

分隔
split_part(Reference, ':', 2)::integer

应该有用。

编辑:

如果你想特别匹配abc: - 试试这个:

CASE
    WHEN position('abc:' in Reference) > 0 
    THEN split_part(Reference, 'abc:', 2)::integer 
    ELSE 0
END

但你应该考虑单独存储xxx:前缀。