SQL Server - 在子查询中排序时间戳日期字段,然后格式化以供查看

时间:2018-05-03 03:00:02

标签: sql sql-server join sql-server-2012 subquery

我有一个查询(SQL Server 2012),它将来自两个不同表的UNIX时间戳组合成一个列,它本身可以正常工作。查询需要按组合日期列进行排序(降序)并转换为可读格式。

如果我在转换日期后尝试排序,则它不起作用,因为它现在是VARCHAR并返回:

// Example program with a function returning a map
#include <iostream>
#include <string>
#include <map>

std::map<std::string, int> 
function()
{
    std::map<std::string, int> out;
    out["one"] = 1;
    out["two"] = 2;
    return out;
}


int main()
{
  std::map<std::string, int> out = function(); 
  for (const auto & iter : out)
    std::cout << iter.first << " = " << iter.second << std::endl;
}

首先,我尝试在ORDER BY子句中包含日期转换,但显然不起作用。

然后我想我可以使用子查询来执行排序,然后在主查询中进行转换(请参阅下面我目前的内容),但这会返回错误:

FETCH语句中NEXT选项的使用无效。

我没有使用fetch语句,所以我想知道我的嵌套中是否存在SQL Server不喜欢的内容。

任何线索都会很棒。

05/02/2018
06/01/2017
07/03/2016

1 个答案:

答案 0 :(得分:0)

IMO这应该适合你:

SELECT CONVERT(VARCHAR(10), DATEADD(second, COALESCE(x.dateX, y.dateY) - DATEDIFF(second, GETDATE(), GETUTCDATE()), CONVERT(DATETIME, '1970-01-01', 103)), 103) AS FinalDate
FROM tableX AS x
INNER JOIN tableY AS y
ON x.id = y.id
ORDER BY COALESCE(x.dateX, y.dateY) DESC;

不确定复制/粘贴CONVERT功能的时间。在MSSQL中将epoch转换为dd / MM / yyyy是否如此复杂?