SQL Server 中將字串按數字排序

苏沐~發表於2024-04-22

方法一:使用 CAST 或 CONVERT

我們可以使用 CAST 或 CONVERT 函式將字串轉換為數字,然後按照數字進行排序。示例如下:

SELECT *
FROM YourTable
ORDER BY CAST(YourColumn AS INT)

方法二:使用 TRY_CAST 或 TRY_CONVERT

如果我們不確定字串中的所有值都可以成功轉換為數字,我們可以使用 TRY_CAST 或 TRY_CONVERT 函式。這兩個函式會嘗試將值轉換為指定的資料型別,如果無法轉換則返回 NULL。示例如下:

SELECT *
FROM YourTable
ORDER BY TRY_CAST(YourColumn AS INT)

方法三:使用 PATINDEX 和 SUBSTRING

如果我們的字串中包含其他非數字字元,我們可以使用 PATINDEX 函式找到數字的起始位置,並使用 SUBSTRING 函式將其提取出來,然後按照數字進行排序。示例如下:

SELECT *
FROM YourTable
ORDER BY CAST(SUBSTRING(YourColumn, PATINDEX('%[0-9]%', YourColumn), LEN(YourColumn)) AS INT)

方法四:使用正規表示式

在 SQL Server 2016 及以上版本中,我們可以使用內建的正規表示式功能來提取字串中的數字,並按照數字進行排序。示例如下:

SELECT *
FROM YourTable
ORDER BY CAST('' AS XML).value('xs:double((.*[0-9])+)[1]', 'FLOAT')

相關文章