我有一个包含2列时间戳数据类型start_time
和end_time
的表。格式类似于'2013-5-19 09:00:00'。
当用户输入日期时,它将类似于 2013-5-19 。如何获得用户输入日期的最大值?
Select max(end_time) from appointment
where ...
答案 0 :(得分:1)
您使用trunc(date)
因此,如果您想要某一天的最大时间戳,您可以
SELECT MAX(end_date)
FROM appointment
WHERE TRUNC(end_date) = to_date('19-05-2013','DD-MM-YYYY') -- <<< users input
答案 1 :(得分:1)
您应该获得MAX(end_time)
并且只获取给定日期内的记录。
或者你可以试试这个:
create table appointment(start_time date, end_time date);
INSERT INTO appointment(start_time, end_time)
VALUES (TO_DATE('2013-5-19 09:00:00', 'yyyy-mm-dd HH24:MI:SS'),
TO_DATE('2013-5-19 11:00:00', 'yyyy-mm-dd HH24:MI:SS'));
SELECT start_time, end_time FROM appointment;
SELECT MAX(end_time) FROM appointment
WHERE TO_CHAR(end_time,'yyyy-mm-dd')=
TO_CHAR(TO_DATE('2013-5-19', 'yyyy-mm-dd'),'yyyy-mm-dd');
答案 2 :(得分:1)
在WHERE子句中使用诸如TRUNC之类的函数可能不允许优化器使用该列上的索引(当然,除非您具有该特定函数和列的基于函数的索引)。我发现在类似的情况下,我需要找到匹配特定日期的表中的所有行(仅提供日期组件YYYY,MM和DD),可以使用范围比较:
DECLARE
dtSome_date DATE := TO_DATE('19-MAY-2013', 'DD-MON-YYYY');
BEGIN
FOR aRow IN (SELECT *
FROM APPOINTMENT e
WHERE e.END_TIME BETWEEN dtSome_date
AND dtSome_date + INTERVAL '1' DAY - INTERVAL '1' SECOND)
LOOP
...whatever...
END LOOP;
END;
分享并享受。