我必须在PostgreSQL中创建一个函数来显示作为参数传递的字符串的对字符。
我想要循环遍历字符串的字符,就像我用C或Java或其他任何东西一样,但我不知道如何单独访问字符,{{1例如,str[i]
是一个字符串,str
是char的位置。
答案 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
。