oracle sql查询中的开始/结束日期和时间

时间:2014-03-11 06:49:55

标签: sql oracle date

我需要一个类似下表的查询输出; 这是表的主要条目,这些记录将由我无法控制的第三方程序修改。任何人都可以推荐一个好的样品吗?

ID | DATEIN              | DATEOUT            | STATUS
 1   02.02.2014 00:00:00   02.02.2014 23:59:59     1
 2   03.02.2014 00:00:00   03.02.2014 23:59:59     0

我试过

SELECT To_Char(To_Date(SYSDATE), 'dd-MM-yyyy hh:mm:ss PM'), 
       To_Char(date_add(To_Date(SYSDATE +1), INTERVAL -1 SECOND), 'dd-MM-yyyy hh:mm:ss PM') 
FROM dual 

但是此查询会引发错误ORA-00907: missing right parenthesis

3 个答案:

答案 0 :(得分:1)

如果您希望它是24小时格式,则无需PM。并注意几分钟的掩码,它是mi,而不是查询中的mm。同样如前所述,无需将SYSDATE转换为日期,因为它已经是该数据类型:

SELECT to_char(to_date(SYSDATE), 'dd-mm-yyyy HH24:mi:ss') date_in,
       to_char(to_date(SYSDATE + 1) - INTERVAL '1' SECOND, 'dd-mm-yyyy HH24:mi:ss') date_out
  FROM dual;

DATE_IN             DATE_OUT
------------------- -------------------
11-03-2014 00:00:00 11-03-2014 23:59:59

答案 1 :(得分:0)

您可以取消DATE_ADD和TO_DATE函数(SYSDATE已经是DATE,不需要转换),并且还使用mi来显示分钟而不是mm这是月份的格式说明符在:

SELECT To_Char(SYSDATE, 'dd-MM-yyyy hh:mi:ss PM'),
       To_Char((SYSDATE + 1) + INTERVAL '-1' SECOND, 'dd-MM-yyyy hh:mi:ss PM')
FROM dual

答案 2 :(得分:-1)

我不清楚你要从上面的查询中实现什么,但如果括号是你唯一的问题那么你必须点击查询:

SELECT To_Char(To_Date((SYSDATE), 'dd-MM-yyyy hh:mm:ss PM')), 
   To_Char(date_add(To_Date(SYSDATE +1), INTERVAL -1 SECOND), 'dd-MM-yyyy hh:mm:ss PM') 
FROM dual