小编典典

T-SQL ORDER BY数字和字母混合在字符串中

sql

我有一系列 独特的 字符串,其中包含数字,有时还包含数字和一个字母,其中的一个示例为:

  • 1倍
  • 2倍
  • 2年
  • 12倍
  • 20
  • 21岁

数字始终在字母前。产生清单的ORDER BY(T-SQL)子句解决方案是什么?

我尝试使用

LEN( fieldName ), fieldname- 可以使用,但适用于20和21。我尝试将字符串表示为整数,但是CAST在转换过程中失败。


阅读 227

收藏
2021-04-28

共1个答案

小编典典

我从这里偷我的细节。

declare @t table(s varchar(25))
insert @t
select '122345684XT' union
select '23339034300-XT' union
select '423432424523242332X' union
 select '422222222111111111232' union
select '423842389034209XYZ' union
select 'ABC'

select 
    left(s,patindex('%[^0-9]%',S+' ')-1 ) nbr 
   ,right(s,len(s)-patindex('%[^0-9]%',S+' ')+1) alpha
from @t

导致

122345684               XT
23339034300             -XT
422222222111111111232   
423432424523242332      X
423842389034209         XYZ
ABC

在您的上下文中使用它。

SELECT * 
FROM YourTable 
ORDER BY left(s,patindex('%[^0-9]%',S+' ')-1 ), 
         right(s,len(s)-patindex('%[^0-9]%',S+' ')+1)

显示方式

declare @t table(s varchar(25))
insert @t
select '12X' union
select '1X' union
select '2X' union
select '2Y' union
select '20' union
select '21'

SELECT * 
FROM @t
ORDER BY CAST(left(s,patindex('%[^0-9]%',S+' ')-1 ) AS INT), 
         right(s,len(s)-patindex('%[^0-9]%',S+' ')+1)

结果是

1X
2X
2Y
12X
20
21
2021-04-28