Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 如何在Postgresql中遍历字符串的字符?_String_Postgresql - Fatal编程技术网

String 如何在Postgresql中遍历字符串的字符?

String 如何在Postgresql中遍历字符串的字符?,string,postgresql,String,Postgresql,我必须在PostgreSQL中创建一个函数来显示作为参数传递的字符串的成对字符 我的想法是循环遍历字符串的字符,就像我在C或Java或其他语言中那样,但我不知道如何单独访问字符,什么是str[I],例如,作为str字符串,以及I字符的位置。在数组上迭代(最佳方式): 表上的迭代: 将使用列col迭代表tbl: col ----- h e l l o (5 rows) 访问行记录.col上的值 不确定为什么要在字符串上“迭代”。这样的任务最好用编程语言来完成。您的问题说明非常非常

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

我的想法是循环遍历字符串的字符,就像我在C或Java或其他语言中那样,但我不知道如何单独访问字符,什么是
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;