[英]Sort Alphanumeric column in SQL Server
My data is in this way 我的数据就是这样
<400
1000-1200
1200-1400
1400-1600
1600-1800
400-600
600-700
700-800
800-1000
And I want this way 我想这样
<400
400-600
600-700
700-800
800-1000
1000-1200
1200-1400
...
order by LEFT(WC.[WGHT_CLAS_DESC], PATINDEX('%[0-9]%', WC.[WGHT_CLAS_DESC])-1),
CONVERT(INT, SUBSTRING(WC.[WGHT_CLAS_DESC], PATINDEX('%[0-9]%', WC.[WGHT_CLAS_DESC]), LEN(WC.[WGHT_CLAS_DESC])))
This is the code I have used in SQL Server but its not working 这是我在SQL Server中使用过的代码,但无法正常工作
Try this: 尝试这个:
DECLARE @DataSource TABLE
(
[Column] VARCHAR(32)
);
INSERT INTO @DataSource ([Column])
VALUES ('<400')
,('1000-1200')
,('1200-1400')
,('1400-1600')
,('1600-1800')
,('400-600')
,('600-700')
,('700-800')
,('800-1000');
SELECT [Column]
,TRY_CONVERT(INT, SUBSTRING([Column], 0, CHARINDEX('-', [Column])))
FROM @DataSource
ORDER BY TRY_CONVERT(INT, SUBSTRING([Column], 0, CHARINDEX('-', [Column])));
Note, that TRY_CONVERT is available after SQL Server 2012
, so if you are using earlier version you can use CAST
: 请注意, TRY_CONVERT在
SQL Server 2012
之后可用,因此,如果您使用的是早期版本,则可以使用CAST
:
ORDER BY CAST(SUBSTRING([Column], 0, CHARINDEX('-', [Column])) AS INT)
I think you mean this: 我想你的意思是:
ORDER BY LEFT(WC.[WGHT_CLAS_DESC], PATINDEX('%[0-9]%', WC.[WGHT_CLAS_DESC])-1) DESC,
CONVERT(INT, SUBSTRING(WC.[WGHT_CLAS_DESC], PATINDEX('%[0-9]%', WC.[WGHT_CLAS_DESC]), PATINDEX('%[^0-9]%', WC.[WGHT_CLAS_DESC])-1))
Try this: 尝试这个:
declare @t table(val varchar(max))
insert into @t
select '<400'
union select '1000-1200'
union select '1200-1400'
union select '1400-1600'
union select '1600-1800'
union select '400-600'
union select '600-700'
union select '700-800'
SELECT rn=row_number() over( order by StartNumber,EndNumber),StartNumber,EndNumber Val
FROM (
select
CAST(RIGHT(val,LEN(val)-CHARINDEX('-',val)) as int) EndNumber,
CAST(REPLACE(val,'-'+RIGHT(val,LEN(val)-CHARINDEX('-',val)),'') as int) StartNumber,
val
from (
SELECT REPLACE(Val,'<','0-') As Val from @t
) a
)Data
of course, i suggest to use TRY_CONVERT after SQL2012 当然,我建议在SQL2012之后使用TRY_CONVERT
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.