【发布时间】:2019-09-26 13:54:18
【问题描述】:
我正在编写一个按日期报告活动信息的 PL/SQL 过程。我在原始日期(类型为日期)字段上排序的地方似乎没有正确排序。如果我使用 to_char 转换它,它可以工作;但 to_char 可能有自己的问题。为什么会这样?
我已经在数据库字段 PT.BEGIN_DATE 上尝试了 order by,并使用下面显示的 to_char 进行了尝试。
select PT.BEGIN_DATE, PT.TRAN_TYPE || '/' || PT.TRAN_CODE as TRAN,
PT.TRAN_NBR, PT.MODULE_NAME, PT.MENU_OPTN_NAME,
TO_CHAR(EXTRACT(HOUR FROM NUMTODSINTERVAL(PT.END_DATE - PT.BEGIN_DATE, 'DAY')), 'FM00') || ':' ||
TO_CHAR(EXTRACT(MINUTE FROM NUMTODSINTERVAL(PT.END_DATE - PT.BEGIN_DATE, 'DAY')), 'FM00') || ':' ||
TO_CHAR(EXTRACT(SECOND FROM NUMTODSINTERVAL(PT.END_DATE - PT.BEGIN_DATE, 'DAY')), 'FM00') as Elapsed,
SU.USER_NAME, COALESCE(trim(IM.SKU_BRCD), ' '), COALESCE(trim(PT.CNTR_NBR),' '), COALESCE(trim(PT.WAVE_NBR), ' '), COALESCE(trim(PT.PKT_CTRL_NBR), ' '), COALESCE(trim(PT.PKT_SEQ_NBR), ' '),
PT.NBR_UNITS, COALESCE(trim(LH1.LOCN_BRCD), ' ') as FROM_LOCN, COALESCE(trim(LH2.LOCN_BRCD), ' ') as TO_LOCN, COALESCE(trim(PT.OLD_STAT_CODE), ' '), COALESCE(trim(PT.NEW_STAT_CODE), ' '),
COALESCE(trim(PT.WKSTN_ID), ' '), PT.USER_ID, PT.END_DATE
from ACT_TRACK_TRAN PT
left join SKU_MASTER IM on IM.SKU_ID = PT.SKU_ID
left join LOCN_MASTER LH1 on LH1.LOCN_ID = PT.FROM_LOCN
left join LOCN_MASTER LH2 on LH2.LOCN_ID = PT.TO_LOCN
left join SEC_USER SU on SU.LOGIN_USER_ID = PT.USER_ID
where pt.MASTER_ID = v_CD and PT.SKU_ID like v_SKUID and PT.USER_ID
like v_USER and PT.PKT_CTRL_NBR like v_PKT and PT.CNTR_NBR Like v_CNTR
and trunc(PT.BEGIN_DATE) between trunc(v_START) and trunc(v_STOP)
ORDER BY to_char(PT.BEGIN_DATE, 'yyyymmddhhmmss') ;
结果如上图:
Start Date/Time
-------------------
09/09/2019 10:09:09
09/09/2019 10:09:23
09/09/2019 10:09:27
仅在 PT_BEGIN_DATE 排序时的结果
Start Date/Time
-------------------
09/09/2019 10:09:23
09/09/2019 10:09:09
09/09/2019 10:09:27
【问题讨论】:
-
只使用
ORDER BY PT.BEGIN_DATE,它的类型是date,不是吗? (你为什么要转换成字符串?) -
我试过了,结果如上图错误
-
试试
ORDER BY to_char(PT.BEGIN_DATE, 'yyyymmddhh24mmss')或者更简单的ORDER BY PT.BEGIN_DATE。为什么使用TO_CHAR? -
REGEXP_SUBSTR(NUMTODSINTERVAL(PT.END_DATE - PT.BEGIN_DATE, 'DAY'), '\d{2}:\d{2}:\d{2}') as Elapsed会更短。 -
感谢大家的帮助,但我必须将此来源发送回密码柜进行审核。所以我暂时保持原样。
标签: sql oracle sql-order-by