如何在Oracle中设置当前小时的修复时间分钟和秒

时间:2015-02-20 06:01:19

标签: mysql oracle

我想在修复时间间隔之间获取数据。

示例:(这在mysql中工作,我想在oracle中使用)

Mysql的

 $ReportStartDate = "DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 HOUR) ,'%Y-%m-%d %H:00:00')"
 $ReportEndDate   = "DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 HOUR),'%Y-%m-%d %H:59:59')";

这在mysql中工作正常。如果可以在oracle中使用.. ??

3 个答案:

答案 0 :(得分:1)

似乎您希望'YYYY-MM-DD HH24:MI:SS'格式的字符数据类型中的值,并且间隔必须是最后一小时。 Oracle中的NOW()SYSDATE函数表示。 DATE_SUB可以通过直接减法一小时来代替。

$ReportStartDate = "to_char(trunc(sysdate - 1/24, 'HH'), 'YYYY-MM-DD HH24:MI:SS')";
$ReportEndDate   = "to_char(trunc(sysdate - 1/24, 'HH') + (3599/3600)/24, 'YYYY-MM-DD HH24:MI:SS')";

更新:您可以将sysdate替换为您想要的任何日期。

答案 1 :(得分:0)

  

$ ReportStartDate =“DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 HOUR),'%Y-%m-%d%H:00:00')”

     

$ ReportEndDate =“DATE_FORMAT(DATE_SUB(NOW(),INTERVAL 1 HOUR),'%Y-%m-%d%H:59:59')”;

您可以将其转换为:

$ReportStartDate = to_date(to_char(SYSDATE, 'dd-mon-yyyy hh24')||':00:00', 'dd-mon-yyyy hh24:mi:ss')
$ReportEndDate   = to_date(to_char(SYSDATE, 'dd-mon-yyyy hh24')||':59:59', 'dd-mon-yyyy hh24:mi:ss')

您可以使用 TO_DATE 和正确的 FORMAT MODEL 。并使用 BETWEEN 来过滤行。

例如,我想获取一段时间内雇用的所有员工:

SQL> alter session set nls_date_format='dd-mon-yyyy hh24:mi:ss';

Session altered.

SQL> SELECT empno,
  2    hiredate
  3  FROM EMP
  4  WHERE HIREDATE BETWEEN
  5  TO_DATE('01-apr-1981 00:00:00','dd-mon-yyyy hh24:mi:ss')
  6  AND
  7  TO_DATE('01-dec-1981 23:59:59','dd-mon-yyyy hh24:mi:ss')
  8  /

     EMPNO HIREDATE
---------- --------------------
      7566 02-apr-1981 00:00:00
      7654 28-sep-1981 00:00:00
      7698 01-may-1981 00:00:00
      7782 09-jun-1981 00:00:00
      7839 17-nov-1981 00:00:00
      7844 08-sep-1981 00:00:00

6 rows selected.

SQL>

UPDATE OP希望小时值应该来自sysdate,但是,分钟和秒应该是00:00

您可以提取小时数,并将00:00附加为分钟和秒值:

SQL> SELECT to_char(SYSDATE, 'dd-mon-yyyy hh24:mi:ss') currentdate,
  2  to_char(SYSDATE, 'dd-mon-yyyy hh24')||':00:00' dt
  3  FROM dual;

CURRENTDATE          DT
-------------------- --------------------
20-feb-2015 12:19:39 20-feb-2015 12:00:00

SQL>

要在任何DATETIME操作中使用该值,请使用 TO_DATE 将其转换为DATE:

to_date(to_char(SYSDATE, 'dd-mon-yyyy hh24')||':00:00', 'dd-mon-yyyy hh24:mi:ss')

答案 2 :(得分:0)

您可以在不转换DATE和字符串的情况下执行此操作。

SELECT 
    TO_CHAR(TRUNC(SYSDATE, 'HH'), 'YYYY-MM-DD HH24:MI:SS'),
    TO_CHAR(TRUNC(SYSDATE, 'HH') + INTERVAL '59:59' MINUTE TO SECOND, 'YYYY-MM-DD HH24:MI:SS')
FROM dual;