У меня есть запрос (SQL Server 2012), который объединяет временные метки UNIX из двух разных таблиц в один столбец, который сам по себе отлично работает. Запрос необходимо отсортировать (по убыванию) по объединенному столбцу даты И преобразовать в читаемый формат.
Если я попытаюсь выполнить сортировку после преобразования даты, это не сработает, поскольку теперь это VARCHAR, и вернет:
05/02/2018
06/01/2017
07/03/2016
Сначала я попытался включить преобразование даты в предложение ORDER BY, но это явно не сработало.
Затем я подумал, что могу использовать подзапрос для выполнения сортировки, а затем выполнить преобразование в основном запросе (см. Ниже, что у меня есть в настоящее время), но это возвращает ошибку:
Недопустимое использование опции NEXT в операторе FETCH.
Я не использую оператор выборки, поэтому мне интересно, есть ли в моем вложении что-то, что не нравится SQL Server.
Любые подсказки были бы потрясающими.
-- Convert Epoch timestamp format to readable (and unsortable) dd/MM/yyyy format
SELECT CONVERT(VARCHAR(10), DATEADD(second, OuterTable.thedate-DATEDIFF(second, GETDATE(), GETUTCDATE()), CONVERT(DATETIME, '1970-01-01', 103)), 103) AS FinalDate
FROM (
-- Subquery only exists to do a proper date sort
SELECT thedate
FROM
(
SELECT
-- Determine which date to use
CASE WHEN x.dateX IS NOT NULL
THEN x.dateX
ELSE y.dateY
END AS thedate
-- Get date from first table
FROM (
SELECT id, dateX -- date is in Epoch format (BIGINT)
FROM tableX
) AS x
-- Get date from second table
JOIN (
SELECT id, dateY -- date is in Epoch format (BIGINT)
FROM tableY
) AS y
ON x.id = y.id
)
-- Perform sort while date is still in epoch format
ORDER BY thedate DESC
) AS OuterTable


ИМО, это должно сработать для вас:
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?
Да, это круто. Я унаследовал отчет от кого-то другого, и именно так даты были преобразованы. На самом деле не рассматривал упрощение (кроме использования функции SQL FORMAT). Дадим срастись - спасибо!