为什么返回的日期不在范围内?

时间:2019-06-25 02:26:42

标签: sql-server

我只想显示2019年5月15日至23日之间的数据。但是为什么它还返回不在日期范围内的数据?

下面是我的查询

read

我得到的输出是这个https://drive.google.com/file/d/1VnrSET1V1eoFvEUUtRwXtQmKGWamURgV/view?usp=sharing

2 个答案:

答案 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_DateTimedatetime格式。我希望该列的值类型为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格式。

请随时要求进一步的混淆。