[英]How do I sort a VARCHAR column in SQL server that contains words and numbers?
[英]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.