譬如value1字段的数据被 ; 字符分割,现在要对value1和value2字段进行大小值的比较
首先创建表和数据
CREATE TABLE my_table (
id SERIAL PRIMARY KEY,
value1 TEXT,
value2 NUMERIC
);
INSERT INTO my_table (value1, value2) VALUES
('10;20;30', 25),
('5;15;25', 20),
('35;45;55', 50),
('1;2;3', 5)
;
--方法1
SELECT *
FROM my_table,
LATERAL unnest(string_to_array(value1, ';')::numeric[]) AS value1_res
WHERE value1_res > value2;
--方法2
SELECT mt.*
FROM my_table mt
JOIN (
SELECT id, unnest(string_to_array(value1, ';')::numeric[]) AS value1_res
FROM my_table
) que ON mt.id = que.id
WHERE que.value1_res > mt.value2;
主要是用到string_to_array函数和unnest函数,string_to_array函数将value1字段拆为数组,::numeric[]将value1的文本类型转换为数字数组类型,unnest
函数将数组展平为多行。
如果分割数据的不是 ; ,譬如是、 , /等,只需将string_to_array函数的第二个参数进行更换,