2015-05-23 110 views
2

在這裏,我想在當前日期和輸入日期的日期差異。在下面我寫case語句,但它返回NULL爲curdate()。這是什麼問題?如何在mysql中編寫case語句?

SELECT admit_patient_details.admit_pat_doctor,admit_patient_details.admit_pat_dept,admit_patient_details.admit_pat_name, 
       admit_patient_details.admit_pat_room_no,admit_patient_details.admit_pat_bed_no 
       ,patient.patient_name,patient.in_date,patient.discharge_date, 
       CASE patient.discharge_date 
        WHEN '0000-00-00' THEN DATEDIFF(curdate(),patient.in_date) 
        ELSE DATEDIFF(patient.discharge_date,patient.in_date) 
       END AS totaldays FROM admit_patient_details,patient 
       having admit_patient_details.admit_pat_name=patient.patient_name 

一些列輸出:

admit_pat_name | in_date | discharge_date |  totaldays | 
Satish Mokashi |2015-05-19 | 2015-05-22  |  3   | 
guddi jagtap |2015-05-12 | 2015-05-20  |  8   | 
Rahul Patil |2015-04-17 | NULL   |  NULL  | 
+0

你可以顯示一些示例數據或創建一個sqlfiddle嗎?我懷疑這可能是由於'datatypes'。檢查'discharge_date'列的數據類型。 – Beginner

+0

@Beginner:請看我最近編輯的問題,我沒有那麼多名聲插入數據庫的圖像。我檢查數據類型都是日期,那麼爲什麼呢? –

回答

1

你列默認爲NULL0000-00-00。所以你可以試試這個:

SELECT 
    admit_patient_details.admit_pat_doctor, 
    admit_patient_details.admit_pat_dept, 
    admit_patient_details.admit_pat_name,   
    admit_patient_details.admit_pat_room_no, 
    admit_patient_details.admit_pat_bed_no, 
    patient.patient_name, 
    patient.in_date, 
    patient.discharge_date, 
    CASE 
    WHEN patient.discharge_date IS NULL THEN DATEDIFF(curdate(),patient.in_date) 
    ELSE DATEDIFF(patient.discharge_date,patient.in_date) 
    END AS totaldays 
FROM admit_patient_details,patient 
HAVING admit_patient_details.admit_pat_name=patient.patient_name 
+0

是的,我的patient.discharge_date列的默認值爲NULL,但我也嘗試了您的解決方案,但它返回的結果與之前一樣.... –

+0

它返回我NULL,因爲我改變了我的查詢,如您所建議的那樣。 discharge_date = NULL then datediff = curdate() - patient.in_date iedatediff ='2015-05-23' - '2015-05-20'= 3 –

+0

在您的解決方案WHEN語句未達到時。我把它寫成這樣,它的工作原理:CASE \t \t WHEN ISNULL(patient.discharge_date)THEN DATEDIFF(CURDATE(),patient.in_date) \t \t \t \t \t \t ELSE DATEDIFF(patient.discharge_date,patient.in_date) \t \t \t \t \t END AS totaldays –