如何从postgresql中的字符串中获取项目?

时间:2015-12-16 13:38:59

标签: sql postgresql

我有一个类似于'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[]

如何获得数组中的第二项?

4 个答案:

答案 0 :(得分:4)

看起来像split_partsql fiddle)的作业:

select split_part('10,244,566', ',', 2);

答案 1 :(得分:1)

分割数据库中包含的字符串并不是数据库所针对的。

这里有不同的选择:

  1. 重新构建数据以生成10,244,566之类的字符串
    1. 三列,如果它总是三个值,或
    2. 使用第二个表格进行n到m的映射
  2. 使用您用来与postgresql交谈的任何语言对分裂进行编程
  3. 黑客攻击相对难以调试,相对较慢,相对而言远离你想要的东西" postgresql中的提取器:select substring(the_column from ',\d+,') from the_table
  4. 强烈建议选择1.1。如果可能,或选项1.2。如果字符串可能并不总是代表三个值。

    就像现在一样,你滥用数据库的字符串数据类型来存储三个整数,这是浪费空间,缓慢,容易出错,反模式和难以维护。

    编辑:我必须收回一些关于滥用数据库的内容:无论是谁将该字符串推入postgresql都滥用数据库,所以现在你必须处理它:(

    编辑您的澄清至关重要:

      

    我在postgresql函数中处理字符串。我的功能是连接到另一个组件(比如说paypal)并将数据突发恢复为STRING。我需要将此String转换为存储在PostgreSQL DB中的项目。所以我catualy将第二个参数保存为整数

    太棒了,所以只需使用您正在使用的编程语言,让我们说出来自Paypal并将其分成三部分。没有理由postgreSQL会比你做得更好,你可以将格式良好的数据传输到你的数据库。

答案 2 :(得分:1)

您可以使用substrstrpos的组合。

SQL Fiddle

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]