【问题标题】:handling dates in derby within query在查询中处理 derby 中的日期
【发布时间】:2015-01-08 12:29:33
【问题描述】:

我在数据库的产品表中有有效期和生产日期(数据类型 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。不知道为什么?

【问题讨论】:

  • 到目前为止你尝试了什么?
  • 我尝试过 DATEDIFF() 函数,但它不适用于德比
  • 你可以把它放在这里,这样我们就可以解决问题
  • select {fn timestampdiff(SQL_TSI_FRAC_SECOND,EXPIRY , MDATE)} as diff from PRODUCTS; 这是我发现的一些相关的东西......它给了我两个日期之间的秒数......
  • 我在这里找到了线索 [stackoverflow.com/questions/11511805/…

标签: sql derby


【解决方案1】:

以下思路:

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

【讨论】:

    【解决方案2】:

    玩了几个小时后,我整理出了查询。感谢所有帮助我完成的人!
    这里是:

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

    解决方案是将 TIMESTAMPDIFF 转换为 DOUBLE。如果不进行转换,它无法计算百分比..为什么,我也不确定。但它对我的工作方式有一些。任何有知识的人,请分享。干杯!

    【讨论】:

      猜你喜欢
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 2022-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多