簡體   English   中英

如何在PostgreSQL中對包含單詞和數字的VARCHAR列進行排序?

[英]How do I sort a VARCHAR column in PostgreSQL that contains words and numbers?

我需要使用varchar列來命令選擇查詢,使用數字和文本順序。 查詢將在java程序中完成,使用jdbc over postgresql。

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

1
11
2
abc

但是,我需要獲得:

1
2
11
abc

問題是該列還可以包含文本。

這個問題類似(但針對SQL Server):

如何在SQL Server中對包含單詞和數字的VARCHAR列進行排序?

但是,提出的解決方案不適用於PostgreSQL。

在此先感謝,問候,

我有同樣的問題,以下代碼解決了它:

SELECT ...
  FROM table
  order by  
    CASE WHEN column < 'A' 
        THEN lpad(column, size, '0')
    ELSE column 
        END;

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

首先,使用正則表達式來檢測列的內容是否為數字。 在這種情況下,我使用'^ \\ d + $',但你可以修改它以適應這種情況。

如果正則表達式不匹配,則返回一個大數字,這樣該行將落在訂單的底部。

如果正則表達式匹配,則將字符串轉換為數字,然后對其進行排序。

在此之后,定期對列進行排序。

我不知道任何數據庫都有“自然排序”,就像PHP中存在的一些數據庫一樣。 我發現的是各種功能:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM