【问题标题】:How to get data between two date range in PostgreSQL?如何在 PostgreSQL 中获取两个日期范围之间的数据?
【发布时间】:2019-07-20 20:40:14
【问题描述】:

我在 PostgreSQL SQL 中查询两个日期范围之间的数据,但它没有给我预期的结果。

select
    pi_serial,
    amount_in_local_currency,
    status,
    proforma_invoice_date
from proforma_invoice
where created_by = 25
    and proforma_invoice_date BETWEEN '03/01/2018' and '09/03/2018'
order by proforma_invoice_date

现在查看查询和列形式发票日期。在此查询中,我正在搜索 03/01/2018 和 09/03/2018 之间的数据。日期格式为 (DD/MM/YYYY) 并且字符不同。我在这张照片中得到的结果。它只是根据唯一的一天给我结果,而不是整个日期格式。我尝试了很多日期转换,字符因日期而异。但我没有得到任何预期的结果

【问题讨论】:

  • 几乎所有 Postgres 版本都不需要添加标签。如果您想要特定版本的答案(例如,您使用的是过时甚至不受支持的版本),那么请只为 that 版本添加标签
  • 从不,永远不要将 DATE 值存储在 varchar 列中。只是不要。您的查询不起作用的原因是错误的数据类型选择。您应该将其转换为真正的 DATE 列。
  • 真的你应该考虑改变你的数据类型。如果你使用varchar作为日期,你也可以插入lalala,它会给你带来问题......你会失去使用日期数据类型的性能。 . 你可以阅读这个sqlblog.org/2009/10/12/…

标签: postgresql


【解决方案1】:

您的查询绝对没问题。只需如下更改即可

select pi_serial, amount_in_local_currency, status, proforma_invoice_date 
from proforma_invoice
where created_by = 25 
  and to_date(proforma_invoice_date, 'DD/MM/YYYY')  BETWEEN to_date('03/01/2018', 'DD/MM/YYYY') and to_date('09/03/2018', 'DD/MM/YYYY') 
order by proforma_invoice_date

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 2013-09-22
    • 2019-03-24
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多