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

Coa*_*der 1 sql t-sql sql-server

不知道这里发生了什么,希望有人可以对此有所了解.

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

SELECT TOP 1 CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY 1 
Run Code Online (Sandbox Code Playgroud)

返回

CreationDate
1802-11-01 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

第二个查询

SELECT TOP 1 Rct_Id, CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY 1 
Run Code Online (Sandbox Code Playgroud)

返回

CreationDate
1994-02-14 00:00:00.000 
Run Code Online (Sandbox Code Playgroud)

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

CreationDate
5202-11-01 00:00:00.000

Rct_Id  CreationDate
714350  2015-02-27 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

我真的很困惑,为什么日期会像这样在自己选择时改变.关于发生了什么的任何想法?

Luk*_*zda 5

ORDER BY 1 是序数的顺序,这是SELECT中的第一列

SELECT TOP 1 CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY 1 
Run Code Online (Sandbox Code Playgroud)

意味着从CreationDate递增排序的表收据中获取一条记录.

SELECT TOP 1 Rct_Id, CreationDate
FROM Receipts
WHERE CreationDate IS NOT NULL
ORDER BY 1 
Run Code Online (Sandbox Code Playgroud)

意味着从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 */
Run Code Online (Sandbox Code Playgroud)