Sql 当我只有日期时选择时间戳?

Sql 当我只有日期时选择时间戳?,sql,oracle,Sql,Oracle,我有一个表,它有两列时间戳数据类型,开始时间和结束时间。格式类似于“2013-5-19 09:00:00” 当用户输入日期时,它将类似于2013-5-19。如何获取用户输入日期的最大值 Select max(end_time) from appointment where ... 使用truncdate在日期中截断时间 因此,如果您想要给定日期的最大时间戳,您可以 SELECT MAX(end_date) FROM appointment WHERE TRUNC(end_date) =

我有一个表,它有两列时间戳数据类型,开始时间和结束时间。格式类似于“2013-5-19 09:00:00”

当用户输入日期时,它将类似于2013-5-19。如何获取用户输入日期的最大值

Select max(end_time) from appointment
where ...

使用truncdate在日期中截断时间

因此,如果您想要给定日期的最大时间戳,您可以

SELECT MAX(end_date)
  FROM appointment
 WHERE TRUNC(end_date) = to_date('19-05-2013','DD-MM-YYYY') -- <<< users input
您应该获取MAXend_时间,并且只获取给定日期内的记录

这是一个例子

或者您可以尝试以下方法:

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');

在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;

共享和享受。

如果用户只给出日期,则该日期的最大时间戳将为该日期的23:59:59。这就是你需要的吗?@John,它需要检查数据库中的值。因此,如果用户想要给定的日期,我首先检查当天的最新约会,即最大结束时间。先到先得。再说一次,maxend_time不是这样做的吗?@Juhana,如果我不在乎这一天的话,那应该是这样的。但如果用户想要不同的一天呢?因此,我需要检查给定日期的最新约会,而不是每天。我不知道PL/SQL,但总体思路是…其中end_time>date 00:00:00和end_time