首页 > 解决方案 > Postgres的查询以按索引选择数组中的值

问题描述

我的数据是这样的字符串:

'湯姆 is a boy.' 

or '梅isagirl.' 

or '約翰,is,a,boy.'.

而且我想拆分字符串,只选择中文名称。

在 R 中,我可以使用命令

tmp=strsplit(string,[A-z% ])

unlist(lapply(tmp,function(x)x[1]))

然后得到我想要的中文名字。

但在 PostgreSQL

select regexp_split_to_array(string,'[A-z% ]') from db.table

我得到一个数组,如 {'汤姆','','',''},{'梅','','',''},... 我不知道如何选择项目数组。

我尝试使用命令

select regexp_split_to_array(string,'[A-z% ]')[1] from db.table

我得到一个错误。

标签: rpostgresql

解决方案


我认为这不regexp_split_to_array适合您在这里尝试做的事情。相反,用于regexp_replace有选择地删除所有 ASCII 字符:

SELECT string, regexp_replace(string, '[[:ascii:]~:;,"]+', '', 'g') AS name
FROM yourTable;

在此处输入图像描述

演示

请注意,您可能需要调整要删除的字符集,具体取决于您希望string列中包含的其他非中文字符。这个答案为您提供了一个关于如何在此处进行的一般性建议。


推荐阅读