String 如何在Postgresql中遍历字符串的字符?
我必须在PostgreSQL中创建一个函数来显示作为参数传递的字符串的成对字符 我的想法是循环遍历字符串的字符,就像我在C或Java或其他语言中那样,但我不知道如何单独访问字符,什么是String 如何在Postgresql中遍历字符串的字符?,string,postgresql,String,Postgresql,我必须在PostgreSQL中创建一个函数来显示作为参数传递的字符串的成对字符 我的想法是循环遍历字符串的字符,就像我在C或Java或其他语言中那样,但我不知道如何单独访问字符,什么是str[I],例如,作为str字符串,以及I字符的位置。在数组上迭代(最佳方式): 表上的迭代: 将使用列col迭代表tbl: col ----- h e l l o (5 rows) 访问行记录.col上的值 不确定为什么要在字符串上“迭代”。这样的任务最好用编程语言来完成。您的问题说明非常非常
str[I]
,例如,作为str
字符串,以及I
字符的位置。在数组上迭代(最佳方式):
表上的迭代: 将使用列
col
迭代表tbl
:
col
-----
h
e
l
l
o
(5 rows)
访问行记录.col
上的值
不确定为什么要在字符串上“迭代”。这样的任务最好用编程语言来完成。您的问题说明非常非常不清楚。所以很难猜测你到底想要什么 假设您需要成对的字符,这样输入字符串
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)
不是你想要的吗正确定义问题。通常,编程中一半的挑战是正确定义问题。一旦你做到了这一点,代码通常几乎是自己编写的。从输入和期望的输出开始。从两端到中间工作
在评论中更新后: 您需要位置为%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;
如果希望字符串不是结果集,则可能包含
字符串\u agg
。查找子字符串
函数。请显示一些输入和预期的结果输出。还有,为什么?通过这样做,你试图解决的根本问题是什么?@Craig Ringer没有我描述的其他问题。我现在正在学习PostgreSQL,这是一个简单的练习;)函数输入和输出的一个例子是:“FunctionPairChars('ThisisAsString')”输出:hssSrnMy bad,有时很难用英语表达我自己,因为英语不是我的母语。很抱歉。我所说的“成对字符”是指“成对位置中的字符”,即位置MOD 2=0的字符串中的字符。正如我所说,如果输入参数是“String”,那么函数显示的字符将是“t”(位置2,从位置1开始)、“I”(位置4)、“g”(位置6)。无论如何,谢谢你的帮助。我想这对我的功能会很好!谢谢今天下午我会试试,如果行得通,我会把你的答案记为答案。关于我如何用PostgreSQL编写它,正如我所说,这是因为它是一本书中的一个简单练习,这就是规范。
regress=> SELECT * FROM charpairs('abcd');
charpairs
-----------
ab
bc
cd
(3 rows)
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;