最近 24 小时的日期格式和获取结果表

Posted

技术标签:

【中文标题】最近 24 小时的日期格式和获取结果表【英文标题】:Date format and getting results form last 24 hours 【发布时间】:2015-08-22 14:29:32 【问题描述】:

我是 SQL 新手,但对下面的查询有疑问。我需要返回过去 24 小时内输入的订单会话,如果我没有最后一条语句,查询将返回所有订单会话,但我只需要过去 24 小时内的订单会话。 CCDBA.O_PAT.ORDER_DDT 不是 Oracle 日期,而是需要使用 ddt.tochar 转换为可读日期的数字。

SELECT DISTINCT
         CCDBA.O_PAT.SESSION_ID, 
         CCDBA.PATIENT.MEDREC_ID "MRN",
         CCDBA.PATIENT.VISIT_NUMBER "Account Number",
         CCDBA.PATIENT.LAST_NAME || ', ' || CCDBA.PATIENT.FIRST_NAME "Patient",
         CCDBA.PATIENT.DEPT_ID "Floor",
         CCDBA.PATIENT.ROOM_ID "Room",
         ddt.tochar(CCDBA.O_PAT.ORDER_DDT) "Order Date"
  FROM CCDBA.PATIENT
 INNER JOIN CCDBA.O_PAT ON CCDBA.O_PAT.PAT_SEQ = CCDBA.PATIENT.PAT_SEQ
 WHERE CCDBA.O_PAT.ORDER_ID = '681278'
  AND TO_DATE(ddt.tochar(CCDBA.O_PAT.ORDER_DDT), 'DD-MON-YY HH24:MI:SS')
        >= SYSDATE -1;

我收到以下错误:

ORA-01843: not a valid month
01843. 00000 -  "not a valid month"
*Cause:    
*Action:

来自CCDBA.O_PAT.ORDER_DDT 的原始数据如下所示:7686745377 使用 ddt.tochar 转换后来自 CCDBA.O_PAT.ORDER_DDT 的数据看起来像这样:02/20/14 09:58

【问题讨论】:

CCDBA.O_PAT.ORDER_DDT列的数据类型是什么,ddt.tochar返回什么? 它是一个 oracle 日期列,数据类型 = NUM​​BER(10,0)。 ddt.tochar 以我们可以读取的格式返回转换后的 oracle 日期。 NUMBER 不是日期列。将日期存储为数字不是一个好主意。问题是您的 tochar 函数返回的格式可能与您的格式掩码不匹配。 我的朋友 McKesson 创建了那个数据库,我只是在使用我所拥有的。 【参考方案1】:

您无需将日期转换为字符串然后再返回来比较日期。简化条件:

WHERE CCDBA.O_PAT.ORDER_ID = '681278' AND
      CCDBA.O_PAT.ORDER_DDT >= SYSDATE - 1;

另外,如果您正在学习 SQL,请学习使用表别名。生成的查询更易于编写和阅读:

SELECT DISTINCT o.SESSION_ID, 
       p.MEDREC_ID  as "MRN",
       p.VISIT_NUMBER as "Account Number",
       p.LAST_NAME || ', ' || p.FIRST_NAME as "Patient",
       p.DEPT_ID as "Floor",
       p.ROOM_ID as "Room",
       ddt.tochar(o.ORDER_DDT) as "Order Date"
FROM CCDBA.PATIENT p INNER JOIN
     CCDBA.O_PAT o
     ON o.PAT_SEQ = p.PAT_SEQ
WHERE o.ORDER_ID = '681278' AND c.ORDER_DDT >= SYSDATE - 1;

而且,如果您不需要DISTINCT,请不要使用它。它只是在不需要时浪费处理时间。

编辑:

对于修改后的日期格式:

WHERE CCDBA.O_PAT.ORDER_ID = '681278' AND
      TO_DATE(ddt.tochar(CCDBA.O_PAT.ORDER_DDT),
              'MM/DD/YYYY HH24:MI') >= sysdate - 1;

【讨论】:

我收到此错误:ORA-00932:数据类型不一致:预期 NUMBER 得到 DATE 00932。00000 -“不一致的数据类型:预期 %s 得到 %s”*原因:*操作:第 12 行错误栏目:28 您的数据库是否将日期存储为日期以外的任何内容?你应该澄清这个问题。 我编辑了问题,CCDBA.O_PAT.ORDER_DDT 是一个 oracle 日期,它是一个必须使用 ddt.tochar 转换为日期的数字。 在这种情况下,格式字符串是错误的。请编辑您的问题并包含一些示例值,说明 o.ORDER_DDT 的外观和 ddt.tochar(o.ORDER_DDT) 的外观。 CCDBA.O_PAT.ORDER_DDT 的原始数据如下所示:7686745377 使用 ddt.tochar 转换后 CCDBA.O_PAT.ORDER_DDT 的数据如下所示:02/20/14 09:58跨度>

以上是关于最近 24 小时的日期格式和获取结果表的主要内容,如果未能解决你的问题,请参考以下文章

如何在 java 上设置日期的 24 小时格式?

字符串的日期时间分别添加时间和日期

Mongodb,按日期差异分组并获取小时

24 小时格式的日期和时间

俩个日期相减获取 02:02:10 格式 天 小时 分钟

如何将日期/时间从 24 小时格式转换为 12 小时 AM/PM? [复制]