替代函数Timestamp

时间:2017-04-12 18:23:40

标签: sql timestamp db2

我想修改下面的查询以避免使用函数Timestamp。由于正在使用此函数,因此不使用索引。请告诉我可以使用的替代品。此查询适用于DB2数据库。

SELECT *                  
  FROM   Capacity CPC          
 WHERE TIMESTAMP(CPC.CPC_DATE,CPC_TIME) BETWEEN            
       CURRENT TIMESTAMP + :Input_number HOURS
   AND                                                   
       CURRENT TIMESTAMP + :Input_number HOURS

2 个答案:

答案 0 :(得分:0)

您必须分别分解日期范围和时间范围。只需要检查时间部分是否在范围的同一日期部分:

SELECT *
FROM Capacity CPC
WHERE 
CPC_DATE >= DATE(CURRENT TIMESTAMP - :Input_number HOUR)
AND
CPC_DATE <= DATE(CURRENT TIMESTAMP + :Input_number HOUR)
AND
CPC_TIME >= 
    CASE WHEN CPC_DATE = DATE(CURRENT TIMESTAMP - :Input_number HOUR)
      THEN TIME(CURRENT TIMESTAMP - :Input_number HOUR)
      ELSE '00:00:00'   
    END
AND 
CPC_TIME <= 
    CASE WHEN CPC_DATE = DATE(CURRENT TIMESTAMP + :Input_number HOUR)
      THEN TIME(CURRENT TIMESTAMP + :Input_number HOUR)
      ELSE '24:00:00' 
    END

答案 1 :(得分:-1)

由于您的数据不在2NF中,它几乎没有希望:CPC_DATECPC_TIME应该是单列CPC_DATETIME。如果您不需要该表单中的时间组件,您仍然可以从YYYY-MM-DD-00:00:00查询(YYYY-MM-DD plus one day minus one second)并使用索引保留。