为什么AS(列名别名)没有得到最新结果?

时间:2019-02-10 21:49:11

标签: sql-server

我有下表列:UPDATE_TIME

UPDATE_TIME

我有这个查询:

SELECT TOP 1 FORMAT([UPDATE_TIME], 'M/d/yyyy h:mm tt') AS UPDATE_TIME FROM table ORDER BY UPDATE_TIME DESC

它应该生成最新日期:

  

2019/2/10下午4:23

而是生成:

2/7 date

我做了一些调试,发现AS是这里的麻烦制造者

不带AS的查询

SELECT TOP 1 FORMAT([UPDATE_TIME], 'M/d/yyyy h:mm tt') FROM table ORDER BY UPDATE_TIME DESC;

结果是正确的最近时间

no column name

但是您可以看到它省略了列名,因为format属性使用了它,这就是为什么需要AS的原因。

如何确保AS始终获得最新结果?

2 个答案:

答案 0 :(得分:2)

因为您要用别名隐藏原始列,所以要按月先进行字典排序(并且格式在前几位都没有填充前导零,这使得即使在一个月之内也可以“正确”排序)

要按基表列而不是格式化的字符串结果排序,请使用两部分命名。

SELECT TOP 1 FORMAT([UPDATE_TIME], 'M/d/yyyy h:mm tt') as UPDATE_TIME
FROM [table] t
ORDER BY t.UPDATE_TIME DESC;

答案 1 :(得分:1)

鉴于您的明显要求(获取最新日期),您能否获取MAX日期?

SELECT FORMAT(MAX([UPDATE_TIME]), 'M/d/yyyy h:mm tt') AS UPDATE_TIME 
FROM table 

它不能回答您有关“ AS”为何有所不同的问题,但可以解决您的问题。