【问题标题】:String column sorting Sql select字符串列排序Sql选择
【发布时间】:2020-01-13 14:53:38
【问题描述】:

我的sql查询有问题,给我返回一个杂乱的结果,我想指导你按照逗号前的数字,不知道你能不能按照例子:

SELECT responsaveis FROM public.pasrem_view where seqalu = 444111;

结果:

"DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2, DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2,DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2, DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2,LILIANA LETICIA CARVALHO THEODORO-00163264155-FILIACAO1,DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2, DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2,DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2,DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2"

我希望你像这样回到我身边:

"LILIANA LETICIA CARVALHO THEODORO-00163264155-FILIACAO1,DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2,DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2,DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2,DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2,DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2,DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2,DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2,DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2"

记住它只是一个结果,字段是一个用“,”分隔的String

示例:https://dbfiddle.uk/?rdbms=postgres_12&fiddle=cdf790d74b053ef8289e428eed0bd62e

【问题讨论】:

  • SQL Server 还是 PostgreSQL? responsaveis 不是降序排列的吗?你的尝试怎么样(SQL 没有ORDER BY 所以不是你的尝试)没有成功?
  • postgresql 和 sqlserver
  • order by the_column DESC?
  • 向我们展示您当前的ORDER BY 尝试。
  • 我认为 OP 表示每行值末尾的逗号 @GordonLinoff 。 IE。 'DIOGO LUIZ BORDON DE SOUZA-89812239120-FILIACAO2,'。并不是说它会对数据的顺序产生任何影响。

标签: sql postgresql


【解决方案1】:

您需要首先将元素取消嵌套到行中(本质上是“即时”规范化您的数据模型),然后您可以将其聚合回排序字符串:

SELECT string_agg(trim(t.element), ',' order by t.element desc)
FROM public.pasrem_view 
  cross join unnest(string_to_array(responsaveis, ',')) as t(element)
where seqalu = 444111;

Online example

【讨论】:

  • 发生错误:SQL 错误 [42601]:错误:“as”位置或附近的语法错误:142
  • SQL 错误 [42883]:错误:函数 string_to_arry(text, unknown) 不存在提示:没有函数与给定名称和参数类型匹配。您可能需要添加显式类型转换。位置:发生108错误
  • @RomeuStack:另一个错字,已修复
  • 结果:Diogo Luiz Bordon de Souza-89812239120-Filiacao2,Liliana Leticia Carvalho Theodoro -00163264155-Filiacao1,Diogo Luiz Bordon de Souza-89812239120-Filiacao2,Diogo Luiz Bordon de Souza-89812239120-Filiacao2,Diogo Luiz Bordon de Souza-89812239120-Filiacao2,Diogo Luiz Bordon de Souza-89812239120-Filiacao2,Diogo Luiz Bordon de Souza-89812239120-Filiacao2,Diogo Luiz Bordon de Souza-89812239120-Filiacao2,Diogo Luiz Bordon de Souza-89812239120-Filiacao2,Handmenale liliane 不在字符串中的主目录中
  • 然后更改 string_agg 中的order by - 你应该在问题中提到 - 每个回答的人都必须猜测
【解决方案2】:

您的问题指的是逗号前的数字。但是样本数据中没有逗号。对于您的结果,降序排序会起作用:

SELECT responsaveis
FROM public.pasrem_view 
WHERE seqalu = 444111
ORDER BY responsaveis DESC;

【讨论】:

  • 按“01”和“02”排序。
  • @RomeuStack 向 cmets 发送垃圾邮件并不能帮助我们帮助您。解决您的问题;显然,如果ORDER BY responsaveis DESC 不起作用(我们拥有的样本会这样)DB<>Fiddle,您并没有给我们真实的图片
猜你喜欢
  • 2015-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-23
  • 2016-03-26
  • 1970-01-01
  • 2014-06-13
  • 2023-03-03
相关资源
最近更新 更多