Mysql BETWEEN 请求返回空行

Posted

技术标签:

【中文标题】Mysql BETWEEN 请求返回空行【英文标题】:Mysql BETWEEN request returns empty row 【发布时间】:2021-06-01 13:59:26 【问题描述】:

我的 postgreSql 数据库中有这样的条目:

并使用了这个 sql 请求:

SELECT *
FROM "options"

WHERE 'startDate' >= '2021-05-01 00:00:00.000+00' AND 'startDate'

这应该返回我的条目,但它没有:(

我尝试了这个请求:

SELECT *
FROM "options"
WHERE 'startDate' BETWEEN '2021-05-01 00:00:00.000+00' AND '2021-05-31 00:00:00.000+00';

返回一个空行。

我也对这些请求做了一些测试:

SELECT * FROM "options" WHERE 'startDate' > '2021-05-31';

这将返回条目(它不应该因为“startDate”是 2021-05-04...我还将 2021 替换为 2022/2030,无论未来的哪个日期,它都会返回条目...

所以请大家帮忙!!!非常感谢!

【问题讨论】:

你不应该引用你的列名和表名吗?尝试类似SELECT * FROM options WHERE startDate >= '2021-05-01 00:00:00.000+00' AND startDate <= '2021-05-31 00:00:00.000+00'; 我删除了冲突的 DBMS 标签。请为您真正使用的数据库产品添加一个标签。 'startDate' >= '2021-05-01 00:00:00.000+00'字符串 'startDate' 与字符串 '2021-05-01 00:00:00.000+00' 进行比较,这总是正确的,因为字符 s 大于字符 2: @ 987654321@ 不要将列名用单引号括起来。我认为这是一个错字,并投票结束。 【参考方案1】:

感谢您的帮助和关注! 它现在可以工作了,我只需在我的 startDate 字段中使用双引号,如下所示:

SELECT * FROM "options" WHERE "startDate" >= '2021-05-01' AND "startDate" <= '2021-05-31'

【讨论】:

【参考方案2】:

您正在将字符串与字符串进行比较。 试试:

SELECT * FROM options WHERE startDate > '2021-05-31';

如果上述方法不起作用,请尝试在列名周围使用双引号。

SELECT * FROM options WHERE "startDate" > '2021-05-31';

示例:https://dbfiddle.uk/?rdbms=postgres_13&fiddle=cdeaaf19845d51ea227ac18ed454857a

更多信息“为什么”:https://***.com/a/2901499/1727039

【讨论】:

嗨,P 先生,谢谢您的回复!事实上,这是我的第一个测试:const lastMonthFirstDate = moment().subtract(1,'months').startOf('month').format('YYYY/MM/DD'); SELECT * FROM "options" WHERE 'startDate' >= '$lastMonthFirstDate' 返回条目,但即使我将此请求与来自未来的日期一起使用,它也会返回条目:SELECT * FROM "options" WHERE 'startDate' > '2023-05 -31';这也返回了我的条目:/ 在评论中您仍在比较字符串。省略引号。看看dbfiddle.uk/…

以上是关于Mysql BETWEEN 请求返回空行的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL 存储过程如何取得一个表的查询结果?

MYSQL 查询不返回 BETWEEN 的结果,但它返回小于和等于子查询的结果

MS Access:从日期时间值返回特定日期的查询

为不存在的数据返回空行

如何在返回 BETWEEN DATE_SUB() 的地方插入日期;

带有日期的运算符之间的mysql