Heim > Fragen und Antworten > Hauptteil
Ich habe einen Datensatz in meinem Bibliotheksverwaltungssystem und verwende die folgende Abfrage, um nur bestimmte Felder abzurufen.
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
Wenn nun kein empfangener Datumswert vorhanden ist, benötige ich die Funktion DATEDIFF, um die Datumsdifferenz zwischen dem heutigen Datum und dem ReturnDate zu ermitteln. Außerdem brauche ich keine negativen Werte. Beispielsweise sollte der Wert von if currdate()<ToBEReturnDate
Null sein (was bedeutet, dass der Benutzer mehr Zeit hat, das Buch zurückzugeben), andernfalls sollte es einen Unterschied geben.
Die endgültige Ausgabe sollte so aussehen,
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
Gibt es eine Möglichkeit, die dateiff-Funktion entsprechend meinen Anforderungen zu verwenden?
P粉2266425682024-04-02 09:09:35
我相信我们确实需要 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粉4188540482024-04-02 00:25:28
我认为是:
SELECT BookName,IssuedDate,ToBEReturnDate,BookStatus , CASE WHEN GETDATE() Antwort0