我有一个类似于'10,244,566'
的字符串
我如何获得2nd
项目?
对于上面的字符串,该项目为244
。
字符串总是看起来像'x,y,z'
。
我在手册http://www.postgresql.org/docs/9.1/static/functions-string.html#FUNCTIONS-STRING-OTHER
修改 字符串是我从其他组件中读取的文本,我无法控制。假设用户输入3个参数..此组件将其保存为字符串并将字符串传递给我。我需要把它分成3个参数。对于我的需要,我只关注第二个paremter。
我可以这样做:
select string_to_array(string, ',', null)
对于上面的示例,它会将{10,244,566}
作为
text[]
如何获得数组中的第二项?
答案 0 :(得分:4)
看起来像split_part
(sql fiddle)的作业:
select split_part('10,244,566', ',', 2);
答案 1 :(得分:1)
分割数据库中包含的字符串并不是数据库所针对的。
这里有不同的选择:
10,244,566
之类的字符串
select substring(the_column from ',\d+,') from the_table
我强烈建议选择1.1。如果可能,或选项1.2。如果字符串可能并不总是代表三个值。
就像现在一样,你滥用数据库的字符串数据类型来存储三个整数,这是浪费空间,缓慢,容易出错,反模式和难以维护。
编辑:我必须收回一些关于你滥用数据库的内容:无论是谁将该字符串推入postgresql都滥用数据库,所以现在你必须处理它:(
编辑您的澄清至关重要:
我在postgresql函数中处理字符串。我的功能是连接到另一个组件(比如说paypal)并将数据突发恢复为STRING。我需要将此String转换为存储在PostgreSQL DB中的项目。所以我catualy将第二个参数保存为整数
太棒了,所以只需使用您正在使用的编程语言,让我们说出来自Paypal并将其分成三部分。没有理由postgreSQL会比你做得更好,你可以将格式良好的数据传输到你的数据库。
答案 2 :(得分:1)
您可以使用substr
和strpos
的组合。
select substr(val,
strpos(val,',')+1,
length(val)-strpos(reverse(val),',')-length(substr(val, 1,strpos(val,',')))
)
from t
答案 3 :(得分:0)
原件:
select string_to_array('10,244,566', ',', null)
只需将数组放在“()”之间,然后引用您想要获得的项目就像“[2]”一样简单:
select (string_to_array('10,244,566', ',', null))[2]