按索引获取字符变化类型的元素或将其转换为数组



我有一些返回character varying类型的sql函数。输出如下所示:"TTFFFFNN"。我需要通过索引获取此字符。如何将字符变化转换为数组?

使用 string_to_array() 和 NULL 作为分隔符 (pg 9.1+(:

SELECT string_to_array('TTFFFFNN'::text, NULL) AS arr;

根据文档:

string_to_array 中,如果分隔符参数为 NULL,则每个字符 在输入字符串中将成为结果数组中的单独元素。

在旧版本 (pg 9.0-( 中,带有 NULL 的调用返回 NULL。(小提琴。

要获得第二个位置(示例(,请执行以下操作:

SELECT (string_to_array('TTFFFFNN'::text, NULL))[2] AS item2;

选择

对于单个字符,我会直接使用substring(),如@a_horse评论:

SELECT substring('TTFFFFNN'::text, 2, 1) AS item2;

SQL 小提琴显示两者。

对于带有实际分隔符的字符串,我建议split_part()

  • 将逗号分隔的列数据拆分为其他列

仅在必要时使用regexp_split_to_array()。正则表达式处理更昂贵。

除了 Erwin 和一匹马概述的解决方案之外,您还可以将regexp_split_to_array()与空正则表达式一起使用:

select regexp_split_to_array('TTFFFFNN'::text, '');

使用索引,它变为:

select (regexp_split_to_array('TTFFFFNN'::text, ''))[2];

最新更新