我有一个包含日期类型字段的表,它包含几个记录,其日期值包含时间部分,少数记录只包含没有时间部分的日期值。如何检查哪条记录有时间部分,哪些没有按记录导航记录?
这就是我现在正在使用的内容,但我想要更快的内容:
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;
答案 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