如何在Postgresql中迭代字符串的字符?

时间:2014-07-02 22:40:30

标签: string postgresql

我必须在PostgreSQL中创建一个函数来显示作为参数传递的字符串的对字符。

我想要循环遍历字符串的字符,就像我用C或Java或其他任何东西一样,但我不知道如何单独访问字符,{{1例如,str[i]是一个字符串,str是char的位置。

2 个答案:

答案 0 :(得分:1)

你想要像

这样的东西
SELECT a[1] FROM (SELECT regexp_split_to_array('hello','')) AS x(a);

 a
---
 h
(1 row)

现在,您可以遍历包含a的{​​{1}}。不确定为什么要对字符串进行“迭代”。这样的任务可以用编程语言更好地完成IMO。

答案 1 :(得分:1)

您的问题规范确实非常不明确。因此很难猜出你真正想要的是什么。

假设你想要字符对,这样输入字符串abcd就会返回ab,bc,cd。这与所提供的模糊描述一样好。

如果这是你想要的,这是一个可能的解决方案:

CREATE OR REPLACE FUNCTION charpairs(text) RETURNS SETOF text AS $$
SELECT substring($1 from x for 2) FROM generate_series(1, length($1)-1) x;
$$
LANGUAGE sql
IMMUTABLE;

用法:

regress=> SELECT * FROM charpairs('abcd');
 charpairs 
-----------
 ab
 bc
 cd
(3 rows)

不是你想要的? 正确定义问题。通常,编程中的一半挑战是正确定义问题。一旦你做得好,代码通常几乎写出自己。从输入和所需输出开始。从最终到中间工作。


在评论中更新后:

你想要position % 2 == 1的字符。所以一种方法是:

CREATE OR REPLACE FUNCTION everysecond(text) RETURNS SETOF text AS $$
SELECT substring($1 from x for 1) FROM generate_series(2, length($1), 2) x;
$$
LANGUAGE sql
IMMUTABLE;

如果你想要一个字符串而不是一个集合作为结果,那么可能在那里有一个string_agg