varchar的数字顺序

问题描述 投票:1回答:1

嘿伙计们,我正在尝试对我的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
sql tsql numeric alphanumeric sql-order-by
1个回答
0
投票

我希望有类似的东西:

order by cast(left(col, patindex('%[^-0-9]%', col + 'x') - 1) as decimal(20, 0))
© www.soinside.com 2019 - 2024. All rights reserved.