27,579
社区成员
发帖
与我相关
我的任务
分享
--rn排序列显示效果
--rn排序列显示效果
;WITH cte AS (
SELECT '1' as id UNION ALL
SELECT '11' UNION ALL
SELECT 'n1' UNION ALL
SELECT 'n11'UNION ALL
SELECT 'n2'
)
SELECT * ,
CAST(ASCII(LEFT(id, 1)) AS BIGINT) * 1000000000 + STUFF(id, 1, 1, '')
* 1 AS rn
FROM cte
ORDER BY CAST(ASCII(LEFT(id, 1)) AS BIGINT) * 1000000000 + STUFF(id, 1, 1, '')
* 1 ;
/*
id rn
1 49000000000
11 49000000001
n1 110000000001
n2 110000000002
n11 110000000011
*/
WITH cte AS (
SELECT '1' as id UNION ALL
SELECT '11' UNION ALL
SELECT 'n1' UNION ALL
SELECT 'n11'UNION ALL
SELECT 'n2'
)
SELECT *,cast(REPLACE(id,'n','9') AS bigint) AS rn FROM cte ORDER BY rn
;WITH cte(id) AS (
SELECT '1'
UNION ALL
SELECT '11'
UNION ALL
SELECT '12'
UNION ALL
SELECT '13'
UNION ALL
SELECT '101'
UNION ALL
SELECT '102'
UNION ALL
SELECT '103'
UNION ALL
SELECT '2'
UNION ALL
SELECT '21'
UNION ALL
SELECT '22'
UNION ALL
SELECT 'n1'
UNION ALL
SELECT 'n2'
UNION ALL
SELECT 'n3'
UNION ALL
SELECT 'n101'
UNION ALL
SELECT 'n102'
UNION ALL
SELECT 'n103'
UNION ALL
SELECT 'n2'
UNION ALL
SELECT 'n21'
)
SELECT * FROM cte
ORDER BY
ISNUMERIC(LEFT(id,1)) DESc,CAST(REPLACE(id,'n','') AS INT)
/*
id
1
2
11
12
13
21
22
101
102
103
n1
n2
n2
n3
n21
n101
n102
n103
*/
WITH tab AS (
SELECT '1' as id UNION ALL
SELECT '11' UNION ALL
SELECT '101' UNION ALL
SELECT '2' UNION ALL
SELECT '201' UNION ALL
SELECT 'n1' UNION ALL
SELECT 'n11'UNION ALL
SELECT 'n2' UNION ALL
SELECT 'n101'
)
SELECT * FROM tab ORDER BY (CASE WHEN ISNUMERIC(id)=1 THEN CONVERT(INT,id) ELSE 999999 END),id
WITH cte AS (
SELECT '1' as id UNION ALL
SELECT '11' UNION ALL
SELECT '21' UNION ALL
SELECT '211'UNION ALL
SELECT '102')
SELECT *,cast(id AS bigint) AS rn FROM cte ORDER BY rn
借用下楼上的代码