在查询中处理德比

时间:2015-01-08 12:29:33

标签: sql derby

我在数据库的产品表中有到期日和生产日期(数据类型DATE),我想应用以下公式来获得我想要的结果:

SELECT * 
  FROM products 
 WHERE (RecentDate - expiry / manufacturing - expiry) * 100 > = 70;

它将显示寿命超过70%的产品。

如何为此任务设计查询(我使用的是Derby)。

我尝试了这个但没有成功

SELECT * FROM PRODUCTS
 WHERE ({fn TIMESTAMPDIFF(SQL_TSI_DAY, CURRENT_TIMESTAMP, EXPIRY)} / 
        {fn TIMESTAMPDIFF(SQL_TSI_DAY, MDATE, EXPIRY )}) * 100 > 70;

这两个timestampdiff的划分给出0.我不知道为什么?

2 个答案:

答案 0 :(得分:0)

以下想法:

select * from  products 
where 
convert(float,DATEDIFF(dd,manufacturing,GETDATE()))/convert(float,DATEDIFF(dd,manufacturing,expiry))*100 > = 70;

答案 1 :(得分:0)

经过几个小时的游戏,我整理了一下这个问题。谢谢所有帮助过我的人!这里是:

  

SELECT EXPIRY,MDATE FROM PRODUCTS in where({fn TIMESTAMPDIFF(SQL_TSI_DAY,MDATE,CURRENT_TIMESTAMP)}为double)/ cast({fn TIMESTAMPDIFF(SQL_TSI_DAY,MDATE,EXPIRY)}为DOUBLE)* 100> 70;

解决方案是将TIMESTAMPDIFF转换为DOUBLE.With out cast,它无法计算百分比..为什么,我也不确定。但是有些它对我有用。任何有知识的人,请分享。干杯!