【问题标题】:PostgreSQL Trim created_at timestamp column values function pg_catalog.btrim(timestamp without time zone) does not existPostgreSQL Trim created_at 时间戳列值函数 pg_catalog.btrim(timestamp without time zone) 不存在
【发布时间】:2018-01-17 14:05:24
【问题描述】:

在我们的 PostgreSQL 中,我们创建了_at 列,它插入了很多数据作为 时间戳。

现在我们正在使用 explain analyze select * from users where created_at > '2018-01-01 11:02:03'::timestamp

时间太长了

所以trim() 这些值是可能的

like created_at > trim('2018-01-01 11:02:03')

请帮帮我

update users set created_at = trim(created_at) 不工作

当我修剪所有 created_at function pg_catalog.btrim(timestamp without time zone) does not exist 时,如何将 created_at 修剪为时间戳而不是它给出错误的日期

谢谢

我为什么要修剪 created_at 时间戳列

作为我修剪的一些列,它发现索引扫描并使选择更快。

但是在 created_at 中我无法让它更快,尽管在 trim() 之后它会进行索引扫描而不是顺序扫描

【问题讨论】:

  • 如果您不想要时间,请使用 date 数据类型。否则,请更详细地解释您的问题。
  • @LaurenzAlbe 如何将 created_at 修剪为时间戳而不是日期,当我修剪所有 created_at `函数 pg_catalog.btrim(timestamp without time zone) 不存在时它给出错误`
  • 您可能正在寻找date_trunc 或想从时间戳转换日期?..
  • date_trunc 将时间戳更改为另一个如果我错了请纠正我@Vao 请发帖
  • 是的——确实如此。我试图猜测你想要实现什么。请发布清晰的数据样本和预期结果。

标签: postgresql performance


【解决方案1】:

如果你做一个简单的:

SELECT to_char(created_at, 'YYYY-MM-DD');

你会得到一个日期字符串。

SELECT to_char(created_at, 'YYYY-MM-DD')::date;

将返回一个日期。

现在,如果您的问题是性能问题,您应该在 created_at 字段上建立索引。

CREATE INDEX ON users (created_at);
explain analyze select * from users where created_at > '2018-01-01';

应该会更快。

【讨论】:

    猜你喜欢
    • 2012-04-04
    • 2013-11-25
    • 2021-11-12
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2013-10-26
    • 2011-03-14
    • 2023-01-10
    相关资源
    最近更新 更多