【发布时间】:2020-11-09 05:55:28
【问题描述】:
:startDate 和 :endDate 从 html 输入中获得值,并通过 AJAX 作为参数传递。我想在 :startDate 和 :endDate 之间返回通知,但如果 startDate 等于 endDate 也返回通知。(用户为两个输入框输入相同的日期)。
SELECT name, FK_userID, subject, messageText, recipients,
CONVERT (varchar, date) as date
FROM notifications
LEFT JOIN users ON users.userID =
notifications.FK_userID
WHERE date
BETWEEN :startDate AND :endDate
OR CONVERT (datetime, date) = :startDate
ORDER BY CONVERT (datetime, date, 100) desc
OR 语句打破了第一个条件。该查询仅适用于 BETWEEN 语句。如果用户为 startDate 和 endDate 输入相同的日期值,我希望查询的 OR 部分返回与两个输入框中输入的日期值相同的任何通知。 预期输出如下所示: 开始日期 = 2020 年 10 月 10 日 结束日期 = 2020 年 10 月 10 日
返回日期值为 10/10/2020 的所有通知
【问题讨论】:
-
那么您的查询不起作用怎么办?考虑将一些示例数据和预期结果显示为格式化文本。
-
date的数据类型是什么?BETWEEN包含在内 - 落在BETWEEN中的任一表达式上的值将已包含在内。 -
我不明白这个问题。您编写了查询仅使用 BETWEEN 语句,这意味着您不需要除此之外的任何内容,但是您添加了破坏事物的
CONVERT语句。删除CONVERT,您已经回答了自己的问题。 -
日期的数据类型是日期时间。如果用户为 startDate 和 endDate 输入 10/20/2020,则不会返回日期为 10/20/2020 的任何行,因为它不在这些值之间。如果 startDate 和 endDate 相等,我会尝试包含结果,并且有一行具有该值。
标签: sql sql-server tsql between