【问题标题】:Postreg SQL get All Value with quotes from the comma separatedPostgresql 使用逗号分隔的引号获取所有值
【发布时间】:2021-07-26 12:54:14
【问题描述】:

我的值在数据库中存储为 1,2,3,4,5

我希望它像 '1','2','3','4','5' 一样回来。

我正在尝试string_agg(format('''%s''', ticker_information.user_groups), ',') 但给了我结果'1,2,3,4,5'

有什么解决办法吗?或者让我知道如果我做错了。

谢谢

【问题讨论】:

  • 不要将您的关系数据存储为 CSV。修复您的设计,您当前的问题甚至可能不再相关。
  • @TimBiegeleisen,实际上它已经被之前的开发者存储了。而且我们现在无法更改架构。它是一个现场..

标签: sql postgresql php-pgsql


【解决方案1】:

如果你只想要一个带引号的字符串,试试这个

WITH sample AS (
  SELECT '1,2,3,4,5'::text as test
)

SELECT
  '''' || array_to_string(
    string_to_array(test, ','),
    ''','''
  ) || ''''
FROM sample

【讨论】:

    【解决方案2】:

    您可以使用unnest 从您的csv 字符串创建一个数组,使用quote_literal() 包装元素,然后再次聚合它们。您可以通过子查询来实现这一点..

    SELECT array_to_string(array_agg(i),',') FROM 
      (SELECT quote_literal(unnest(string_to_array(user_groups,','))) 
       FROM ticker_information) j (i);
    
       array_to_string   
    ---------------------
     '1','2','3','4','5'
    

    或者使用LATERAL

    SELECT array_to_string(array_agg(quote_literal(j.i)),',') 
    FROM ticker_information, 
    LATERAL unnest(string_to_array(user_groups,',')) j (i);
    
      array_to_string
    ---------------------
    '1','2','3','4','5'
    

    另一种选择是使用正则表达式。但如果 csv 的元素包含逗号,它可能会变得很糟糕。

    演示:db<>fiddle

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 2015-02-18
      • 2017-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多