Postgres数据库表包含char(20)列中用空格分隔的单词。 select语句的结果应该是包含两列的表。
第一列应包含第一个单词。 第二列应包含剩余的单词。 例如
firstword remainingwords
word11 word12 word13
word21
word31 word32
应该产生
DECLARE
inv_money character.money%TYPE;
CURSOR updmoney IS
SELECT *
FROM character
WHERE id IN (SELECT character_id FROM inst_creature)
FOR UPDATE OF money;
BEGIN
FOR v_character IN updmoney LOOP
SELECT inst_creature.money
INTO inv_money
FROM inst_creature,character
WHERE inst_creature.character_id = character.ID;
UPDATE character
SET money = money+inv_money
WHERE CURRENT OF updmoney;
END LOOP;
COMMIT;
END;
可以用什么表达代替?标志产生这一点。可以使用一些正则表达式或其他解决方案吗?
使用PostgreSQL 9.1.2
答案 0 :(得分:2)
将值转换为数组并使用:
select (string_to_array(t, ' '))[1] as first_word,
(string_to_array(t, ' '))[2:99]
from test;
数组比字符串更容易使用,特别是如果您在一行中有列表。但是,如果您愿意使用array_to_string()
,则可以转换回字符串。
在你的Postgres版本中,这更准确地写为:
select (string_to_array(t, ' '))[1] as first_word,
(string_to_array(t, ' '))[2:cardinality( string_to_array(t, ' ') )]
from test;
在Postgres 9.6中,支持这种速记:
select (string_to_array(t, ' '))[1] as first_word,
(string_to_array(t, ' '))[2:]
from test;