我想反转栏的一部分。例如;
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
有可能吗?请帮帮我...谢谢..
答案 0 :(得分:5)
您可以使用:
0000000000000000000000000A000000 -> 0x0A000000
0x0000000000000000000000000A000000 -> 0x0A000000
000000000000000000000000C0A80000 -> 0xC0A80000
0x000000000000000000000000C0A80000 -> 0xC0A80000
答案 1 :(得分:1)
您需要使用DESC
。它将按降序返回上述列的结果。
SELECT ColumnName FROM TableName ORDER BY ColumnName DESC
如果您不是不是明确提到列的ORDER BY,则默认情况下它将被视为ASC
(升序)。
根据您编辑的问题,以下查询将使用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
答案 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.