我想在 postgres 中拆分代表 csv 行的列。此文本行中的字段由竖线分隔,有时用引号括起来,有时不括起来。此外,我们还可以转义字符。
field1|"field2"|field3|"22 \" lcd \| screen "
是否有正则表达式来分割此列(即使用 regexp_split_to_array(....)?)
与正则表达式无关,但它有效
create or replace function split_csv(
line text,
delim_char char(1) = ',',
quote_char char(1) = '"')
returns setof text[] immutable language plpythonu as $$
import csv
return csv.reader(line.splitlines(), quotechar=quote_char, delimiter=delim_char, skipinitialspace=True, escapechar='\\')
$$;
select *, x[4] from split_csv('field1|"field2"|field3|"22 \" lcd \| screen "'||E'\n'||'a|b', delim_char := '|') as x;
╔══════════════════════════════════════════════╤════════════════════╗
║ x │ x ║
╠══════════════════════════════════════════════╪════════════════════╣
║ {field1,field2,field3,"22 \" lcd | screen "} │ 22 " lcd | screen ║
║ {a,b} │ ░░░░ ║
╚══════════════════════════════════════════════╧════════════════════╝
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)