如何在mysql表中使用DateDIFF函數
P粉416996828
P粉416996828 2024-04-01 10:12:54
0
2
460

我的圖書館管理系統中有一個資料集,我使用下面的查詢僅取得特定欄位。

select BookName,IssuedDate,ToBEReturnDate,BookStatus from issuedbooks;

RESULT:
Book Name   Issued Date Return Date   ReceivedDate     Book Status
Book 1        5/1/2022   5/14/2022                     Not Received
Book 2        5/2/2022   5/15/2022                     Not Received
Book 3        5/3/2022   5/16/2022                     Not Received
Book 4        5/4/2022   5/17/2022     5/24/2022         Received
Book 5        5/5/2022   5/18/2022                     Not Received
Book 6        5/5/2022   6/10/2022                     Not Received

現在,如果沒有任何收到的日期值,我需要 DATEDIFF 函數來取得今天日期和 ReturnDate 之間的日期差。另外,我也不需要負值。例如 if currdate()<ToBEReturnDate 的值應該為零(表示使用者有更多時間還書),如果不是,則應該存在差異。

最終輸出應如下圖所示,

Book Name   IssuedDate  ReturnDate  ReceivedDate    BookStatus    DateExpire
Book 1      5/1/2022    5/14/2022                   Not Received     15
Book 2      5/2/2022    5/15/2022                   Not Received     14
Book 3      5/3/2022    5/16/2022                   Not Received     13
Book 4      5/4/2022    5/17/2022   5/24/2022         Received        7
Book 5      5/5/2022    5/18/2022                   Not Received     11
Book 6      5/5/2022    6/10/2022                   Not Received      0

有什麼方法可以根據我的需要使用 datediff 函數嗎?

P粉416996828
P粉416996828

全部回覆(2)
P粉226642568

我相信我們確實需要 receiveddate 列,該列在您的原始查詢中缺失。此外,作為 date 日期類型,receiveddate 列不允許使用空字串作為其值,我們需要將其儲存為 null,但稍後可以顯示為空字串。這是我在工作台中編寫和測試的程式碼。

select BookName as 'Book Name',IssuedDate,ToBEReturnDate as ReturnDate, ifnull(receiveddate,'') as ReceivedDate , BookStatus,
case 
when receiveddate is null then if(datediff(current_date(),tobereturndate)>0, datediff(current_date(),tobereturndate), 0)
else if(datediff(receiveddate,tobereturndate)>0, datediff(receiveddate,tobereturndate), 0)
end as DateExpire
from issuedbooks
;
P粉418854048

我認為是:

SELECT  BookName,IssuedDate,ToBEReturnDate,BookStatus ,
CASE WHEN  GETDATE()
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板