如何在 SQL Server 中对 varchar 值进行排序?varchar 不能转换为 int,因为它包含字母和数字。这是一个相当标准的查询,如图所示:
select distinct Rij from [dbo].[Kist] Order by Rij desc
输出:
61
54
5
4
3
23
21
13
12
11
10D
10C
10A
1
我尝试了以下查询:
select
Rij
from
Kist
order by
isnumeric(Rij) desc,
case when isnumeric(Rij) = 1 then cast(Rij as int) else null end,
Rij
这里唯一的问题是带有数字和字母的值将放在最后,例如值“10D”。这里的另一个问题是我不能使用 DISTINCT 方法。
任何帮助将非常感激。
编辑:
select Rij
from Kist
Order by CAST(LEFT(Rij, PATINDEX('%[^0-9]%', Rij + 'a') - 1) as int)
这个查询很完美,唯一的问题是我不能使用 distinct ,因为 SQL 没有识别与 select 列相同的 order by 子句。我该怎么做呢?
编辑:通过使用 Group by 子句修复它:
select Rij
from Kist
Group by Rij
Order by CAST( LEFT(Rij, PATINDEX('%[^0-9]%', Rij + 'a') - 1) as int)
就像我说的,DISTINCT
在子查询中使用,并使用TRY_CONVERT
:
SELECT *
FROM (SELECT DISTINCT Rij
FROM Kist) K
ORDER BY CASE WHEN TRY_CONVERT(int,K.Rij) IS NOT NULL THEN 0 ELSE 1 END,
TRY_CONVERT(int,K.Rij),
Rij;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句