我有一系列唯一字符串,其中包含数字,有时还包含数字和字母,其中的示例如下:
数字/ s总是在字母前面。 ORDER BY(T-SQL)子句解决方案是什么产生一个列表,它会给我上面说明的顺序?
我尝试使用
LEN( fieldName ), fieldname - 这对20和21有用。我试过将字符串表示为整数,但CAST在转换中失败过程
答案 0 :(得分:2)
我从Here窃取了我的详细信息。
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