如何在SQL中对字母数字值进行排序 [英] how to sort the alphanumeric values in sql

查看:469
本文介绍了如何在SQL中对字母数字值进行排序的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

大家好,

我处于关键位置,任何人都可以在这种情况下为我提供帮助.实际我的问题是在我的表中有一个nvarchar类型的数据,其数据如

1
0.2a
1a
a.2
z
a
001
08
008.003


我需要输出为:
0.2a
1
001
1a
08
8.003
a
a.2
z

在此先感谢
Seshu

Hi folks,

I am in critical position any one can help me from this condition . Actual my problem is in my table there is a nvarchar type data which having data like

1
0.2a
1a
a.2
z
a
001
08
008.003


I need output as:
0.2a
1
001
1a
08
8.003
a
a.2
z

Thanks in advance
Seshu

推荐答案

SELECT id FROM sortaln ORDER BY
CASE WHEN ISNUMERIC(id) = 1 THEN RIGHT(REPLICATE('0',51) + id, 50)
     WHEN ISNUMERIC(id) = 0 THEN LEFT(id + REPLICATE('',51), 50)
     ELSE id
END


试试这个,希望对您有帮助


try this i hope it helps you


您好,

如果将数据列表一分为二,这有意义吗?一个列表仅包含数字,另一个包含其他列表.分别对这两个列表进行排序,然后合并它们(将另一个列表附加到数字列表的末尾)

我想这并不难,但是您将需要编写一个或两个临时表的存储过程.

希望对您有所帮助:)问候
Hi there,

Would it make sense if you split the list of data into two? One list containing only numbers, the other containing the rest of it. Sort these 2 lists separately, and merge them (append the other list to the end of the numeric list)

I suppose this isn''t hard to do, but you will need to write a stored procedure with a temporary table or two.

Hope this helps :) Regards


请检查以下SQL代码.我希望它现在能解决您的问题....

创建标签#T-原始
(
T VARCHAR(10)
)

创建标签#TSort --sorted
(
ID INT IDENTITY,
T VARCHAR(10)
)

插入#T
选择``0.2a''UNION ALL
选择``1''UNION ALL
选择''001''UNION ALL
选择``1a''UNION ALL
选择''08''UNION ALL
选择''8.003''UNION ALL
选择''a''UNION ALL
选择''a.2''UNION ALL
选择''z''UNION ALL
选择``10''UNION ALL
选择``11''UNION ALL
选择``2''UNION ALL
选择``3''UNION ALL
选择''31''UNION ALL
选择``4''UNION ALL
选择''46''UNION ALL
选择''21''


插入#TSort
SELECT T
从#T
在哪里(ISNUMERIC(LEFT(T,LEN(T)-1))= 1 AND ISNUMERIC(T)= 0)或ISNUMERIC(T)= 1
按案例订购
当(ISNUMERIC(LEFT(T,LEN(T)-1))= 1并且ISNUMERIC(T)= 0)然后转换(FLOAT,LEFT(T,LEN(T)-1))
当ISNUMERIC(T)= 1然后转换为(FLOAT,T)END

插入#TSort
从#T中选择T,其中ISNUMERIC(T)= 0并且ISNUMERIC(LEFT(T,LEN(T)-1))= 0
按T排序

从#TSort按ID排序
中选择T
拖放表#T
删除表#TSort

谢谢
Please check the following SQL code. I hope it will now resolve ur problem....

CREATE TABLe #T -- original
(
T VARCHAR(10)
)

CREATE TABLe #TSort --sorted
(
ID INT IDENTITY,
T VARCHAR(10)
)

INSERT INTO #T
SELECT ''0.2a'' UNION ALL
SELECT ''1'' UNION ALL
SELECT ''001'' UNION ALL
SELECT ''1a'' UNION ALL
SELECT ''08'' UNION ALL
SELECT ''8.003'' UNION ALL
SELECT ''a'' UNION ALL
SELECT ''a.2'' UNION ALL
SELECT ''z'' UNION ALL
SELECT ''10'' UNION ALL
SELECT ''11'' UNION ALL
SELECT ''2'' UNION ALL
SELECT ''3'' UNION ALL
SELECT ''31'' UNION ALL
SELECT ''4'' UNION ALL
SELECT ''46'' UNION ALL
SELECT ''21''


INSERT INTO #TSort
SELECT T
FROM #T
WHERE (ISNUMERIC(LEFT(T, LEN(T) - 1)) = 1 AND ISNUMERIC(T) = 0) OR ISNUMERIC(T) = 1
ORDER BY CASE
WHEN (ISNUMERIC(LEFT(T, LEN(T) - 1)) = 1 AND ISNUMERIC(T) = 0) THEN CONVERT(FLOAT,LEFT(T, LEN(T) - 1))
WHEN ISNUMERIC(T) = 1 THEN CONVERT(FLOAT,T) END

INSERT INTO #TSort
SELECT T FROM #T WHERE ISNUMERIC(T) = 0 AND ISNUMERIC(LEFT(T, LEN(T) - 1)) = 0
ORDER BY T

SELECT T FROM #TSort ORDER BY ID

DROP TABLE #T
DROP TABLE #TSort

Thanks


这篇关于如何在SQL中对字母数字值进行排序的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆