字符串的SQL排序

字符串的SQL排序,sql,sql-server,Sql,Sql Server,我有一列字符串,我正试图按照下面显示的顺序获取这些字符串 我尝试过使用子字符串、case语句和正确的语法来实现正确的升序,但我无法理解 字符串的长度永远不会超过4,例如A10a尽可能大,并且始终遵循此格式(字符串、数字、字符串) 我试图提取最后一个字符,如果它是一个字母,然后使用case语句将其转换为一个数字,有人知道这是否可行吗 可能吗?这里的任何帮助都值得赞赏这真的很难看,但很有效: declare @test table (test varchar(4)) insert into @t

我有一列字符串,我正试图按照下面显示的顺序获取这些字符串

我尝试过使用子字符串、case语句和正确的语法来实现正确的升序,但我无法理解

字符串的长度永远不会超过4,例如A10a尽可能大,并且始终遵循此格式(字符串、数字、字符串)

我试图提取最后一个字符,如果它是一个字母,然后使用case语句将其转换为一个数字,有人知道这是否可行吗


可能吗?这里的任何帮助都值得赞赏

这真的很难看,但很有效:

declare @test table (test varchar(4))


insert into @test values ('A1')
insert into @test values ('A2')
insert into @test values ('A2a')
insert into @test values ('A2b')
insert into @test values ('A10')
insert into @test values ('A10a')
insert into @test values ('A10b')

select * ,
 LEFT(test,1), 
 CAST(CASE 
 WHEN LEN(test) =3 AND right(test,1) like '[a-z]' THEN substring(test,2,1)
ELSE substring(test,2,2)
END AS INTEGER)
,CASE WHEN right(test,1) like '[a-z]' THEN RIGHT(test,1) ELSE '' END    

from @test
ORDER BY 
 LEFT(test,1), 
 CAST(CASE 
 WHEN LEN(test) =3 AND right(test,1) like '[a-z]' THEN substring(test,2,1)
ELSE substring(test,2,2)
END AS INTEGER)
,CASE WHEN right(test,1) like '[a-z]' THEN RIGHT(test,1) ELSE '' END

这确实很难看,但有效:

declare @test table (test varchar(4))


insert into @test values ('A1')
insert into @test values ('A2')
insert into @test values ('A2a')
insert into @test values ('A2b')
insert into @test values ('A10')
insert into @test values ('A10a')
insert into @test values ('A10b')

select * ,
 LEFT(test,1), 
 CAST(CASE 
 WHEN LEN(test) =3 AND right(test,1) like '[a-z]' THEN substring(test,2,1)
ELSE substring(test,2,2)
END AS INTEGER)
,CASE WHEN right(test,1) like '[a-z]' THEN RIGHT(test,1) ELSE '' END    

from @test
ORDER BY 
 LEFT(test,1), 
 CAST(CASE 
 WHEN LEN(test) =3 AND right(test,1) like '[a-z]' THEN substring(test,2,1)
ELSE substring(test,2,2)
END AS INTEGER)
,CASE WHEN right(test,1) like '[a-z]' THEN RIGHT(test,1) ELSE '' END

这取决于字段值的变化方式,取决于正确的数据采样方式您的数据没有按需要的方式存储。字符串
'A10'
位于字符串
'A2'
之前。以您需要的格式获取数据。在我看来,您需要“规范化”该列,以便能够按照您想要的方式对其进行排序。@Smithy,而不是在注释中发布有用的信息。i、 关于该列的格式。请把它添加到问题中。通过这种方式,新用户可以立即看到它。这取决于您的字段值如何变化以及正确的数据采样方式您的数据没有以您需要的方式存储。字符串
'A10'
位于字符串
'A2'
之前。以您需要的格式获取数据。在我看来,您需要“规范化”该列,以便能够按照您想要的方式对其进行排序。@Smithy,而不是在注释中发布有用的信息。i、 关于该列的格式。请把它添加到问题中。这样,新的人可以立即看到它。