[英]SQL Order by DESC on alphanumeric field with numbers before words
我正在尝试按顺序在SQL表中有一列。 数据必须采用desc格式,因此必须先显示最近几年的数据。
Sample Data Expect Output
----------- -------------
older 2013
2012 2012
2013 2011
2011 older
使用这种特定方法,我只能访问Order by
和WHERE
子句,而不能使用完整的SQL。
这限制了我不能将数据分两组提取并加入。 我也不能处理older
领域像999order
和剥离999
后出来。
有没有一种订购的方式可以满足我的需求?
您可以在ORDER BY
子句中使用CASE
语句:
WITH tbl AS(
SELECT 'older' AS date_col UNION ALL
SELECT '2012' UNION ALL
SELECT '2013' UNION ALL
SELECT '2011'
)
SELECT *
FROM tbl
ORDER BY
CASE
WHEN date_col NOT LIKE '%[^0-9]%' THEN 0
ELSE 1
END,
date_col DESC
NOT LIKE '%[^0-9]%'
表示date_col
由所有数字组成。 将0
分配给这些行,因为它们将排在第一位。 然后按date_col DESC
排序。
结果
date_col
--------
2013
2012
2011
older
一个(肮脏的)技巧是使用bin
函数:它将为非数字字符串返回'0'
,因此'older
”将首先出现:
SELECT *
FROM mytable
ORDER BY BIN(year_column)
您可以尝试以下方法:
SELECT * FROM t5 ORDER BY BIN(samp_data) DESC;
我们可以不使用ISNUMERIC()
函数代替NOT LIKE
ISNUMERIC()
DECLARE @test TABLE
(
value varchar(10)
)
INSERT INTO @test
VALUES
('2010'),
('2011'),
('2012'),
('2013'),
('2014'),
('2015'),
('older')
SELECT * From @test
ORDER BY
(CASE WHEN ISNUMERIC(value) = 1 THEN 0 ELSE 1 END),value DESC
这将首先显示数字行
Select *
From [Table Name]
Order By IsNumeric([Column Name]) DESC, [Column Name] DESC
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.