在Power BI中合并Progress中的日期字段和时间字段Open edge SQL语句

时间:2019-06-18 12:25:16

标签: sql powerbi openedge

所以我有一个疑问,我一直在疯狂地尝试去工作,我觉得它应该很容易,但是我错了很多。

我有两个字段要与不到两个小时的系统日期进行比较。因此,基本上,过去两个小时内发生的所有事情。 日期是日期数据类型,而时间是文本数据类型。

这是我尝试执行它的多种方法之一;

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

我还尝试过转换TO_DATE()中的每个字段,仅转换时间,使用TO_DATE和TO_TIMESTAMP以及许多其他变体来转换所有时间和sysdate。所有输出都会引发数据类型不一致的错误。

如果可以,请协助!

1 个答案:

答案 0 :(得分:1)

我没有一个可以处理的字符字段的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