我有一些返回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];