【发布时间】:2018-10-02 14:30:26
【问题描述】:
大家好,我正在尝试对我的 varchar 列进行排序。我几乎完成了它,但我找不到以下解决方案:
-999, -998, 0, 8A, 80, 80A, 90, A80, ADBA
目前是(见代码): -998, -999, 0, 8A, 80, 80A, 90, A80, ADBA
我只需要修复负值。有人有解决这个问题的办法吗?
SELECT RANK_NUMBER FROM SHIPMENT_EVENT
ORDER BY CASE WHEN ISNUMERIC(RANK_NUMBER) = 1 THEN RIGHT('0000000000' + RANK_NUMBER, 10) ELSE CASE
WHEN LEFT(RANK_NUMBER, 1) LIKE '[0-9]' THEN RIGHT(
'0000000000'
+ LEFT(SUBSTRING(RANK_NUMBER, PATINDEX('%[0-9.-]%', RANK_NUMBER
), 80
),
PATINDEX
('%[^0-9.-]%', SUBSTRING(RANK_NUMBER, PATINDEX('%[0-9.-]%',
RANK_NUMBER),
80
) + 'X') -1), 10)
ELSE RANK_NUMBER
END
END
【问题讨论】:
-
订货中为什么8A小于80?它几乎看起来像十六进制排序,但这并不一致。你能解释一下排序这些值的逻辑吗?
标签: sql tsql numeric alphanumeric sql-order-by