Oracle - 如何检查我的日期字段值是否有时间部分

时间:2013-11-08 01:28:12

标签: oracle date datetime time plsql

我有一个包含日期类型字段的表,它包含几个记录,其日期值包含时间部分,少数记录只包含没有时间部分的日期值。如何检查哪条记录有时间部分,哪些没有按记录导航记录?

这就是我现在正在使用的内容,但我想要更快的内容:

SELECT MY_TAB.SEQ, MY_TAB.CRTE_DT,
       CASE WHEN TRUNC (MY_TAB.CRTE_DT) = MY_TAB.CRTE_DT
       THEN 'False' ELSE 'True' END AS "Has Time Portion"
FROM (SELECT 1 AS SEQ,
             TO_DATE ('7/28/2013', 'MM/DD/YYYY') AS CRTE_DT
      FROM DUAL
      UNION
      SELECT 2 AS SEQ,
             TO_DATE ('11/07/2013 12:27:54', 'MM/DD/YYYY HH24:MI:SS') AS CRTE_DT
      FROM DUAL) MY_TAB;

3 个答案:

答案 0 :(得分:1)

很好的解决方案。只有一个问题。如果时间戳是午夜12:00,则结果将为false。

TO_DATE('11 / 07/2013 00:00:00','MM / DD / YYYY HH24:MI:SS')将屈服于假

答案 1 :(得分:1)

创建表MY_TAB 如    SELECT SEQ,CRTE_DT      FROM(SELECT 1 AS SEQ,TO_DATE('7/28/2013','MM / DD / YYYY')AS CRTE_DT FROM DUAL            联盟            SELECT 2 AS SEQ,                   TO_DATE('11 / 07/2013 12:27:54','MM / DD / YYYY HH24:MI:SS')AS CRTE_DT来自DUAL            联盟            SELECT 3 AS SEQ,                   TO_DATE('09 / 5/2013 00:00:00','MM / DD / YYYY HH24:MI:SS')AS CRTE_DT来自DUAL            联盟            SELECT 4 AS SEQ,TO_DATE('4/15/2013 00:00:01','MM / DD / YYYY HH24:MI:SS')AS CRTE_DT FROM DUAL            联盟            SELECT 5 AS SEQ,TO_DATE('12 / 12/2012 1:01:01','MM / DD / YYYY HH24:MI:SS')AS CRTE_DT FROM DUAL);

选择MY_TAB.SEQ,MY_TAB.CRTE_DT,        TRUNC(MY_TAB.CRTE_DT)= MY_TAB.CRTE_DT时的情况        那么'错'''''真''结束为'有时间部分“   来自MY_TAB;

答案 2 :(得分:0)

如果您只是想检查数据字段是否包含时间部分,可以通过将会话更改为

来实现。
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'dd/mm/yyyy';

Session altered.

SQL> SELECT SYSDATE FROM dual;

SYSDATE
----------
08/11/2013

SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'dd/mm/yyyy hh24:mi:ss';

Session altered.

SQL> SELECT SYSDATE FROM dual;

SYSDATE
-------------------
08/11/2013 08:30:49     
相关问题