SQL-列的反向部分

时间:2019-06-06 12:37:40

标签: sql sql-server

我想反转栏的一部分。例如;

    SELECT Column FROM Table ORDER BY Column ASC

输出:

Column
------
Kaan001
Kaan002
Kaan003
Turan001
Turan002

如果我使用DESC而不是ASC;

Column
------
Turan002
Turan001
Kaan003
Kaan002
Kaan001

但是我想要这个;

Column
------
Turan001
Turan002
Kaan001
Kaan002
Kaan003

有可能吗?请帮帮我...谢谢..

4 个答案:

答案 0 :(得分:5)

您可以使用:

0000000000000000000000000A000000   -> 0x0A000000
0x0000000000000000000000000A000000 -> 0x0A000000

000000000000000000000000C0A80000   -> 0xC0A80000
0x000000000000000000000000C0A80000 -> 0xC0A80000

答案 1 :(得分:1)

您需要使用DESC。它将按降序返回上述列的结果。

SELECT ColumnName FROM TableName ORDER BY ColumnName DESC

如果您不是不是明确提到列的ORDER BY,则默认情况下它将被视为ASC(升序)。

Demo on db<>fiddle


根据您编辑的问题,以下查询将使用PATINDEX

SELECT ColumnName
FROM TableName 
ORDER BY LEFT(ColumnName, PATINDEX('%[0-9]%', ColumnName) - 1) DESC, 
         RIGHT(ColumnName, LEN(ColumnName) - PATINDEX('%[0-9]%', ColumnName) + 1) ASC

Updated db<>fiddle demo

答案 2 :(得分:0)

您可以尝试以下查询。

create table #temp (
    id int identity(1,1),
    testCol Varchar(20)
)

insert into #temp values ('Turan002'),('Turan001'),('Kaan003'),('Kaan002'),('Kaan001')    

SELECT 
    * from 
    #temp order by RTRIM(SUBSTRING( testCol , 1 , CHARINDEX( '0' , testCol) - 1)) desc, 
       RTRIM(SUBSTRING( testCol , CHARINDEX( '0' , testCol ), LEN( testCol) - (CHARINDEX( '0' , testCol) - 1))) asc

drop table #temp

您可以找到演示Here

答案 3 :(得分:0)

据我了解

select * from (
 values 
 ('Kaan001')
,('Kaan002')
,('Kaan003')
,('Turan001')
,('Turan002')
) d (val) 
order by left (val, PATINDEX ('%[0-9]%', val) - 1) desc
, right (val, PATINDEX ('%[0-9]%', val)) -- Here, Patindex returns the first appearance of integer.