最近 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 日期列,数据类型 = NUMBER(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 小时的日期格式和获取结果表的主要内容,如果未能解决你的问题,请参考以下文章