如何从我的SQL string_to_array删除空字?



我在Postgres表中有一个文本列,我想删除任何非字母字符并通过空格分隔它(因此我可以使用每个单词稍后进行搜索)。

我可以删除字符并成功分割它,但是我的行有空结果。我不能有任何空词:

SELECT
asset.id,
string_to_array(TRIM(regexp_replace(asset.title, '[^a-zA-Z ]', '', 'g')), ' ')
FROM
assets asset


Hello world!变为{Hello,world}
Some Result V1.0 - 3D Model变为{Some,Result,V,,D,Model

如何过滤数组以删除空单词?

您可以将数组转换为表格,然后清理内容,并再次将结果转换为数组:

CREATE OR REPLACE FUNCTION public.remove_empty_string(text[])
RETURNS text[]
LANGUAGE sql
AS $function$
select array(select v from unnest($1) g(v) where v <> '')
$function$
(2022-06-20 05:17:57) postgres=# select remove_empty_string(array['Some','Result','V','','D','Model']);
┌─────────────────────────┐
│   remove_empty_string   │
╞═════════════════════════╡
│ {Some,Result,V,D,Model} │
└─────────────────────────┘
(1 row)

尝试使用多字符正则表达式

试试这个:

SELECT
asset.id,
string_to_array(TRIM(regexp_replace(asset.title, '[^a-zA-Z]+', ' ', 'g')), ' ')
FROM
assets asset

我只是从正则表达式中删除了空格,以便捕获每个非字母字符。然后,+表示一个或多个巧合,这确保任何连续的非字母字符将被替换为单个空格。最后,由于您已经完成了修剪,您的空白分割将起作用。

最新更新