首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何对PostgreSQL中包含单词和数字的VARCHAR列进行排序?

如何对PostgreSQL中包含单词和数字的VARCHAR列进行排序?
EN

Stack Overflow用户
提问于 2010-11-03 02:15:24
回答 3查看 11K关注 0票数 6

我需要使用varchar列、数字和文本顺序对select查询进行排序。查询将在java程序中完成,使用基于postgresql的jdbc。

如果我在select子句中使用ORDER BY,我会得到:

代码语言:javascript
运行
复制
1
11
2
abc

但是,我需要获得:

代码语言:javascript
运行
复制
1
2
11
abc

问题是该列还可以包含文本。

此问题类似(但针对SQL Server):

How do I sort a VARCHAR column in SQL server that contains words and numbers?

但是,提出的解决方案不适用于PostgreSQL。

提前感谢,致以敬意,

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-03 17:19:18

我也遇到了同样的问题,下面的代码解决了这个问题:

代码语言:javascript
运行
复制
SELECT ...
  FROM table
  order by  
    CASE WHEN column < 'A' 
        THEN lpad(column, size, '0')
    ELSE column 
        END;

大小var是varchar列的长度,例如,对于varying( 255 ),为255。

票数 6
EN

Stack Overflow用户

发布于 2010-11-03 07:48:17

你可以使用正则表达式来做这样的事情:

代码语言:javascript
运行
复制
select THECOL from ...
order by
  case
    when substring(THECOL from '^\d+$') is null then 9999
    else cast(THECOL as integer)
  end,
  THECOL

首先,使用正则表达式来检测列的内容是否为数字。在本例中,我使用了'^\d+$‘,但您可以根据情况修改它。

如果regexp不匹配,则返回一个较大的数字,这样该行将位于顺序的底部。

如果regexp匹配,则将字符串转换为number,然后对其进行排序。

在此之后,定期对列进行排序。

票数 5
EN

Stack Overflow用户

发布于 2010-11-03 02:18:15

我不知道有任何数据库具有“自然排序”,就像一些已知存在于PHP中的数据库一样。我所找到的是各种函数:

  • Natural order sort in Postgres
  • Comment in the PostgreSQL ORDER BY documentation
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4080787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档