我想修改下面的查询以避免使用函数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
答案 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_DATE
和CPC_TIME
应该是单列CPC_DATETIME
。如果您不需要该表单中的时间组件,您仍然可以从YYYY-MM-DD-00:00:00
查询(YYYY-MM-DD plus one day minus one second)
并使用索引保留。