SQL按字母顺序排序的字母数字字段上的字母数字字段
问题描述:
我在SQL表中有一列我正在尝试通过执行一个命令。数据需要在desc中显示,因此它首先显示更近的年份。SQL按字母顺序排序的字母数字字段上的字母数字字段
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
+1
工作魅力伴侣感谢。 – Spitfire2k6
答
您可以试试这个:
SELECT * FROM t5 ORDER BY BIN(samp_data) DESC;
答
难道我们不能使用ISNUMERIC()
函数而不是NOT LIKE
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
什么是“特殊方法”你说的是数字排?你尝试使用数据查询吗? http://devnet.kentico.com/articles/kentico-8-technology-dataquery-advanced-api(它支持连接) – rocky