我只想显示2019年5月15日至23日之间的数据。但是为什么它还返回不在日期范围内的数据?
下面是我的查询
read
我得到的输出是这个https://drive.google.com/file/d/1VnrSET1V1eoFvEUUtRwXtQmKGWamURgV/view?usp=sharing
答案 0 :(得分:0)
您正在比较文本,而不是日期。因此它将返回日期转换为字符串的起始行,该行介于15到23之间。 您需要在比较中使用日期数据类型:
WHERE Appointment_DateTime >= CAST('20190515' AS date) AND Appointment_DateTime < CAST('20190524' AS date)
请注意,我在结束范围内增加了一天,所以仍然可以接受05/23/2019 11:59:59.9 ... PM。 CAST作为日期不是必需的,但是可以提高可读性。
答案 1 :(得分:0)
问题出在您的where
子句中。由于您的Appointment_DateTime
为datetime
格式。我希望该列的值类型为datetime
。
现在进入您的查询,'23/05/2019'
是简单的字符串,因此无法将其与日期时间进行比较。首先,您需要将日期和日期转换为datetime
格式。
请尝试执行此操作(如果只考虑日期匹配):
SELECT Appointment_ID,
WO_DespatchName, Despatch_Name AS WO_selectDespatchName,
FORMAT(Appointment_DateTime, 'dd/MMM/yyyy hh:mm tt') AS Appointment_DateTime,
FORMAT(Appointment_ProposalSent, 'dd/MMM/yyyy') AS Appointment_ProposalSent,
WO_MaidName, Maid_Name AS WO_selectMaidName,
Appointment_Location, Appointment_FaceToFace, Appointment_Service, Appointment_Remarks, WO_Duration,
Appointment_ContactID, Contact_Name AS Appointment_selectContactID
FROM Appointments A
LEFT JOIN Despatch ON Despatch_ID = WO_DespatchName
LEFT JOIN CustomerDetails ON Contact_ID = Appointment_ContactID
LEFT JOIN Maid ON Maid_ID = WO_MaidName
WHERE FORMAT(Appointment_DateTime, 'dd/MM/yyyy') BETWEEN FORMAT('15/05/2019', 'dd/MM/yyyy') AND FORMAT('23/05/2019', 'dd/MM/yyyy')
AND (A.IsDelete = 0 OR A.IsDelete IS NULL)
ORDER BY CONVERT(DateTime, Appointment_DateTime,101) ASC
或者您可以尝试convert
将字符串转换为datetime
格式。
请随时要求进一步的混淆。