SQL Sever在SELECT中以奇怪的格式进行日期

时间:2015-09-01 16:43:08

标签: sql sql-server tsql

不确定这里发生了什么,希望有人可以对此有所了解。

两个查询,几乎相同,除了第一个只选择一个日期列,而第二个选择另一个列:

SELECT TOP 1 CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY 1 

返回

CreationDate
1802-11-01 00:00:00.000

第二次查询

SELECT TOP 1 Rct_Id, CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY 1 

返回

CreationDate
1994-02-14 00:00:00.000 

第二个是合理的和预期的,或多或少可追溯到创建数据集时。我跑了第二组,更改了ORDER BY 1 DESC并得到了

CreationDate
5202-11-01 00:00:00.000

Rct_Id  CreationDate
714350  2015-02-27 00:00:00.000

我真的很困惑,为什么日期会因为选择它自己而改变。关于发生了什么的任何想法?

1 个答案:

答案 0 :(得分:5)

ORDER BY 1是序号的顺序,这是SELECT

中的第一列
SELECT TOP 1 CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY 1 

表示从CreationDate升序排序的表收据中获取一条记录。

SELECT TOP 1 Rct_Id, CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY 1 

表示从Rct_id升序

排序的表收据中获取一条记录

要获得与第一个查询相同的结果,请使用ORDER BY 2明确指定列名称(良好做法)。同样适用于DESC

SELECT TOP 1 Rct_Id, CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY CreationDate   /* Or ORDER BY 2 */