SQL Server 使用字母和数字对 VARCHAR 进行排序

卢达炸弹

如何在 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

用字母和数字对varchar进行排序-PostgreSQL

在包含数字的SQL Server中对VARCHAR列进行排序?

对字母数字 SQL Server 列进行排序

在 SQL Server 中对字母数字进行排序

如何在SQL Server中使用字符和数字(如字母数字)创建自动增量列?

我的sql用数字部分对varchar字段进行排序

SQl Server:首先对字母数字进行排序,然后再对数字进行排序

使用字母数字值和仅字母值的混合值对SQL中的字母数字列进行排序

如何使用C#对SQL Server中的字母数字列进行排序?

使用VarChar进行列排序

SQL-使用字母数字字符排序

用字母数字和特殊字符值对varchar排序

用字母和数字在python中对表格进行排序

在SQL Server中从varchar转换为数字

在SQL Server中用数字更新varchar

如何按数字顺序对字母数字SQL Server NVARCHAR列进行排序?

在 C# 中使用字母和数字 (code="BC1") 属性对 XML 进行排序

用数字和字母对 VARCHAR 列进行排序

在SQL Server中以数字方式对字符串进行排序

在SQL Server中查询以对具有数字和字母的数据进行排序

Sql Server 2008中的字母数字排序

SQL Server 先按字母再按数字排序

排序规则冲突 SQL Server varchar 存储过程参数

SQL Server Varchar的大小

在Microsoft SQL Server上使用IN时对行进行排序

对 SQL 中的字母数字列进行排序

如何在SQL中的varchar和数字值的组合之间进行搜索?

用字符和数字对List <>进行排序

在T-SQL中,如何从最低值到最高值对钱(我使用VARCHAR)进行排序?