SQL Server - сортировка поля даты метки времени в подзапросе, затем формат для просмотра

У меня есть запрос (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
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
321
1

Ответы 1

ИМО, это должно сработать для вас:

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). Дадим срастись - спасибо!

LiceRewis 03.05.2018 05:15

Другие вопросы по теме