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 查询不返回 BETWEEN 的结果,但它返回小于和等于子查询的结果