最近 24 小时的日期格式和获取结果表格
Date format and getting results form last 24 hours
我是 SQL 的新手,我遇到以下查询的问题。我需要 return 过去 24 小时内输入的订单会话,查询 returns 所有订单会话,如果我在那里没有最后一条语句,但我只需要来自最后 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
您不需要将日期转换为字符串然后再转换回来以比较日期。简化条件:
WHERE CCDBA.O_PAT.ORDER_ID = '681278' AND
CCDBA.O_PAT.ORDER_DDT >= SYSDATE - 1;
此外,如果您正在学习 SQL,请学习使用 table 别名。生成的查询更易于编写和阅读:
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;
我是 SQL 的新手,我遇到以下查询的问题。我需要 return 过去 24 小时内输入的订单会话,查询 returns 所有订单会话,如果我在那里没有最后一条语句,但我只需要来自最后 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
您不需要将日期转换为字符串然后再转换回来以比较日期。简化条件:
WHERE CCDBA.O_PAT.ORDER_ID = '681278' AND
CCDBA.O_PAT.ORDER_DDT >= SYSDATE - 1;
此外,如果您正在学习 SQL,请学习使用 table 别名。生成的查询更易于编写和阅读:
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;