我有一系列 独特的 字符串,其中包含数字,有时还包含数字和一个字母,其中的一个示例为:
数字始终在字母前。产生清单的ORDER BY(T-SQL)子句解决方案是什么?
我尝试使用
LEN( fieldName ), fieldname- 可以使用,但适用于20和21。我尝试将字符串表示为整数,但是CAST在转换过程中失败。
我从这里偷我的细节。
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