【问题标题】:SQL: How to data of current date from timestamp field in oracle?SQL:如何从oracle中的时间戳字段中获取当前日期的数据?
【发布时间】:2020-05-22 02:14:42
【问题描述】:

如何从oracle的时间戳字段中获取当前日期的数据?

select
 jobstatus0_.JOBNAME as JOBNAME1_21_,
 jobstatus0_.STARTDATE as STARTDATE2_21_,
 jobstatus0_.ENDDATE as ENDDATE3_21_,
 jobstatus0_.REMARKS as REMARKS4_21_,
  jobstatus0_.STATUS as STATUS5_21_
 from
   PD_OWNER.CIM_SNOW_JOB_STATUS_TAB jobstatus0_
  where
 jobstatus0_.JOBNAME='AGREEMENTS'
 AND jobstatus0_.STARTDATE=sysdate <-- Not working with this

我们不需要考虑时间而只考虑日期

我试过了,但也没用。

and cast(jobstatus0_.STARTDATE as date)=sysdate

也使用了哪个有效

AND  to_date(to_char(jobstatus0_.STARTDATE,'DD-MON-YYYY'))=to_date(to_char(sysdate,'DD-MON-YYYY'));

但想要更优雅的方式。

【问题讨论】:

    标签: sql oracle sysdate


    【解决方案1】:

    你可以使用TRUNC(date)函数

    目的

    TRUNC(日期)函数返回日期,其中一天中的时间部分被截断为格式模型 fmt 指定的单位。返回的值始终是数据类型 DATE,即使您为日期指定了不同的日期时间数据类型。如果省略 fmt,则日期将截断为最近的日期。 fmt 中允许使用的格式模型请参考“ROUND 和 TRUNC 日期函数”。

    示例

    以下示例截断日期:

    SELECT TRUNC(TO_DATE('27-OCT-92','DD-MON-YY'), 'YEAR')
      "New Year" FROM DUAL;
    
    New Year
    ---------
    01-JAN-92 
    

    【讨论】:

    • 我更新了您的答案以包含您链接的页面中的信息。当你这样做而不是仅仅链接时,人们会发现它更有帮助。
    【解决方案2】:

    在 postgresql/mysql 中使用如下

    date(jobstatus0_.STARTDATE)=date(now())
    

    在 sql-server 中

    cast(jobstatus0_.STARTDATE as date)=cast(CURRENT_TIMESTAMP as date)
    

    【讨论】:

      【解决方案3】:

      如果STARTDATE 列是DATE(或TIMESTAMP),您可以截断它(以及SYSDATE)并得到

      and trunc(jobstatus0_startdate) = trunc(sysdate)
      

      trunc 将删除时间组件:

      SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';
      
      Session altered.
      
      SQL> select trunc(sysdate) trd,
        2         trunc(systimestamp) trt
        3  from dual;
      
      TRD                 TRT
      ------------------- -------------------
      06.02.2020 00:00:00 06.02.2020 00:00:00
      
      SQL>
      

      虽然,如果该列上有索引,截断它会使索引不可用,但这是另一回事,有一种解决方法(基于函数的索引或使列值“介于”sysdate at 这个下一个午夜)。

      【讨论】:

      • "将删除时间分量" - 严格来说它只设置为00:00:00,结果值仍然有时间分量
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-10
      • 2020-01-02
      • 1970-01-01
      • 1970-01-01
      • 2020-01-23
      • 2023-02-02
      • 2010-12-31
      相关资源
      最近更新 更多