Ang*_*zon 6 sql postgresql jdbc natural-sort
我需要使用varchar列来命令选择查询,使用数字和文本顺序.查询将在java程序中完成,使用jdbc over postgresql.
如果我ORDER BY在select子句中使用,我会得到:
1
11
2
abc
Run Code Online (Sandbox Code Playgroud)
但是,我需要获得:
1
2
11
abc
Run Code Online (Sandbox Code Playgroud)
问题是该列还可以包含文本.
这个问题类似(但针对SQL Server):
如何在SQL Server中对包含单词和数字的VARCHAR列进行排序?
但是,提出的解决方案不适用于PostgreSQL.
在此先感谢,问候,
小智 6
我有同样的问题,以下代码解决了它:
SELECT ...
FROM table
order by
CASE WHEN column < 'A'
THEN lpad(column, size, '0')
ELSE column
END;
Run Code Online (Sandbox Code Playgroud)
size var是varchar列的长度,例如255,用于变化(255).
您可以使用正则表达式来执行此类操作:
select THECOL from ...
order by
case
when substring(THECOL from '^\d+$') is null then 9999
else cast(THECOL as integer)
end,
THECOL
Run Code Online (Sandbox Code Playgroud)
首先,使用正则表达式来检测列的内容是否为数字.在这种情况下,我使用'^\d + $',但你可以修改它以适应这种情况.
如果正则表达式不匹配,则返回一个大数字,这样该行将落在订单的底部.
如果正则表达式匹配,则将字符串转换为数字,然后对其进行排序.
在此之后,定期对列进行排序.
| 归档时间: |
|
| 查看次数: |
9605 次 |
| 最近记录: |