【问题标题】:Mysql BETWEEN request returns empty rowMysql BETWEEN 请求返回空行
【发布时间】: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@
  • 不要将列名用单引号括起来。我认为这是一个错字,并投票结束。

标签: sql datetime between


【解决方案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://stackoverflow.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/…
    猜你喜欢
    • 2015-11-20
    • 2023-04-02
    • 2015-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多