Объединение поля даты и поля времени в SQL-выражении Progress Open edge в Power BI - PullRequest
0 голосов
/ 18 июня 2019

Итак, у меня есть запрос, который я лихорадочно пытался заставить работать, и я чувствую, что это должно было быть достаточно легко, но я очень сильно ошибался.

У меня есть два поля, которые я пытаюсь сравнить с системной датой меньше двух часов. Так что в основном все, что произошло за последние два часа. Дата - это тип данных даты, а время - текстовый тип данных.

Вот пример одного из многих способов, которыми я пытался его выполнить;

SELECT *
FROM 
   ExampleTable
WHERE
   TO_DATE( DateField || ' ' || TimeField ) >= sysdate -(2/24)

Я также попытался преобразовать каждое поле в TO_DATE (), преобразовав только время, преобразовав все из них и sysdate, используя TO_DATE, TO_TIMESTAMP и многие другие варианты. Все выходы выдают ошибку несовместимых типов данных.

Пожалуйста, помогите, если можете!

1 Ответ

1 голос
/ 19 июня 2019

У меня нет TimeField, которое является символьным полем для раздачи. В среде OpenEdge нормой является сохранение времени в виде целого числа (секунд после полуночи), а затем отображение его в требуемом формате: string (TimeField, "HH: MM: SS").

Если это целое число, вы можете использовать следующий SQL.

SELECT *
FROM ExampleTable
WHERE TIMESTAMPDIFF( SQL_TSI_HOUR, TIMESTAMPADD( SQL_TSI_SECOND, TimeField, DateField ), NOW() ) <= 2

Если ваше TimeField действительно является символьным полем, вы можете использовать:

SELECT *
FROM ExampleTable
WHERE 
  TIMESTAMPDIFF( 
    SQL_TSI_HOUR, 
    TO_TIMESTAMP( CONCAT( CONCAT( TO_CHAR( DateField ), ' ' ), TimeField ) ),
    NOW()
   ) <= 2

Но так как похоже, что в любом случае это будет полное сканирование таблицы, вы можете добавить нормальное предложение where, чтобы ограничить результаты последними двумя днями.

AND DateField > CURDATE() - 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...