我正在尝试查询的表中有三个特定的列,比如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)?
答案 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:
前缀。