Firebird将常量添加到查询中的返回列

时间:2019-10-03 20:19:11

标签: sql firebird

我正在使用Firebird 2.5或3.0。我有一个查询,它从两个相同的子查询中合并相同的字段。我想向第二个子查询的列添加固定值,以确保该子查询的值与第一个子查询的相同列值不同:

    select Q1.* from (select VDATE, VTIME, STAT, PRICURR, SECCURR from "DevHistory"
                      where DEVID = :ID and VDATE = :DAY1 order by VDATE, VTIME) Q1
    union all
    select Q2.* from (select VDATE, VTIME + 1440, STAT, PRICURR, SECCURR from "DevHistory"
                      where DEVID = :ID and VDATE = :DAY2 order by VDATE, VTIME) Q2; 

VDATE是整数朱利安日期,VTIME是自午夜以来的整数分钟数,并且:DAY1:DAY2参数始终是2个连续的天数,因此第二个子查询的1440常数。

VTIME + 1440语法当然不起作用,但这是我想要完成的。有没有办法在查询中做到这一点?还是检索后必须对数据进行按摩?

1 个答案:

答案 0 :(得分:0)

对于我输入的查询,答案是在两个子查询中都需要为VTIME字段加别名,然后查询才能工作。输入后,我在VTIME + 1440处收到-104错误,但是如果我将第一个子项更改为VTIME as MyTime,将第二个子项更改为(VTIME + 1440) as MyTime,则可以正常工作。

select Q1.* from (select VDATE, VTIME AS MyTime, STAT, PRICURR, SECCURR 
                  from "DevHistory"
                  where DEVID = :ID and VDATE = :DAY1 order by VDATE, MyTime) Q1
union all
select Q2.* from (select VDATE, (VTIME + 1440) AS MyTime, STAT, PRICURR, SECCURR 
                  from "DevHistory"
                  where DEVID = :ID and VDATE = :DAY2 order by VDATE, MyTime) Q2; 

包装器之所以在这里,是因为如果我不这样做,它会抱怨order by子句。

这两个:ID参数与FireDAC一起使用,都使用在Params [0]中设置的单个传递的设备ID进行填充。我还没有在其他数据库库中尝试过它(我有UniDAC,有机会的话会在那儿尝试。)

相关问题