我有一个查询(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
答案 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是否如此复杂?