【问题标题】:Postgresql - select something where date = "01/01/11"Postgresql - 选择日期=“01/01/11”的东西
【发布时间】:2011-05-03 21:05:30
【问题描述】:

我的 Postgresql 中有一个名为“dt”的日期时间字段。 我想做类似的事情

SELECT * FROM myTable WHERE extract (date from dt) = '01/01/11'

这样做的正确语法是什么?

谢谢!

【问题讨论】:

    标签: sql postgresql datetime


    【解决方案1】:

    我认为您想将您的 dt 转换为 date 并修复 the format of your date literal

    SELECT *
    FROM table
    WHERE dt::date = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD
    

    或者standard version

    SELECT *
    FROM table
    WHERE CAST(dt AS DATE) = '2011-01-01' -- This should be ISO-8601 format, YYYY-MM-DD
    

    extract function 不理解“日期”,它返回一个数字。

    【讨论】:

    • 一个补充:如果时间戳字段被索引,使用 dt::date 或 CAST(dt AS date) 会阻止索引被使用。另一种方法是在 dt::date 上构建函数索引或以这种方式编写它(使用参数 $1 作为日期字符串):WHERE dt >= $1 AND dt
    • 无论@MatthewWood 说什么,都是对的 :)
    • 完美运行!
    【解决方案2】:

    对于 PostgreSQL,有许多日期/时间函数可用,请参阅 here

    在您的示例中,您可以使用:

    SELECT * FROM myTable WHERE date_trunc('day', dt) = 'YYYY-MM-DD';
    

    如果您定期运行此查询,也可以使用date_trunc 函数创建索引:

    CREATE INDEX date_trunc_dt_idx ON myTable ( date_trunc('day', dt) );
    

    这样做的一个好处是,如果需要,时区会更加灵活,例如:

    CREATE INDEX date_trunc_dt_idx ON myTable ( date_trunc('day', dt at time zone 'Australia/Sydney') );
    SELECT * FROM myTable WHERE date_trunc('day', dt at time zone 'Australia/Sydney') = 'YYYY-MM-DD';
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-17
      • 2018-12-06
      • 2015-12-31
      相关资源
      最近更新 更多