2015-08-22 40 views
1

我是SQL新手,我對下面的查詢有問題。我需要返回在過去24小時內輸入的訂單會話,如果我沒有最後一條語句,查詢將返回所有訂單會話,但我只需要最近24小時內的會話。 CCDBA.O_PAT.ORDER_DDT不是Oracle日期數字,需要使用ddt.tochar轉換爲可讀日期。過去24小時內收到日期格式和結果信息

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; 

我得到folloing錯誤:

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

CCDBA.O_PAT.ORDER_DDT的原始數據是這樣的:7686745377 從外觀CCDBA.O_PAT.ORDER_DDT這樣的數據使用ddt.tochar轉換後:02/20/14 09:58

+0

什麼是CCDBA.O_PAT.ORDER_DDT列的數據類型的,什麼是ddt.tochar回報? – OldProgrammer

+0

它是一個oracle日期列,數據類型= NUM​​BER(10,0)。 ddt.tochar以我們可以讀取的格式返回轉換後的oracle日期。 – user2037188

+2

NUMBER不是日期欄。將日期存儲爲數字並不是一個好主意。問題在於你的tochar函數返回的格式可能與你的格式掩碼不匹配。 – OldProgrammer

回答

0

您不需要將日期轉換爲字符串,然後再返回以比較日期。簡化條件:

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; 
+0

我得到這個錯誤: ORA-00932:不一致的數據類型:預期數量得到DATE 00932. 00000 - 「不一致的數據類型:有望%S得了%的」 *原因: *動作: 行錯誤:12列: 28 – user2037188

+0

數據庫存儲的日期與日期不同嗎?你應該澄清這個問題。 –

+0

我編輯了這個問題,CCDBA.O_PAT.ORDER_DDT是一個oracle日期,它是一個必須使用ddt.tochar轉換爲日期的數字。 – user2037188

相關問題