如何从 SQLite3 和 PostgreSQL 中的时间戳中选择日期
Posted
技术标签:
【中文标题】如何从 SQLite3 和 PostgreSQL 中的时间戳中选择日期【英文标题】:How to select just date from timestamp in SQLite3 and PostgreSQL 【发布时间】:2010-12-15 18:46:26 【问题描述】:在我的 Rails 项目中,我有一个包含时间戳行的分数表,我需要查询并查找每天的最新记录。我的生产数据库是 PostgreSQL,虽然我在 sqlite3 中本地开发/测试。
我在构建 SQL 查询以仅从时间戳中提取日期时遇到问题。所以如果这是时间戳:2010-12-13 23:03:40.485012+0000,那么我只需检查 2010-12-13 并忽略时间。
Scores table:
id :integer
name :string
score :integer
updated_at :timestamp
而且由于每个名称每天都有多行,因此我想查找每天的 MAX 时间戳,并查看每个名称每天的最新分数。
我尝试过使用 DATE() 函数,但没有任何运气。有人知道这样做的最佳方法吗?
【问题讨论】:
【参考方案1】:在the SQLite date functions 中,您需要一个冒号来分隔时区中的小时和分钟。
sqlite> select date('2010-12-13 23:03:40.485012+0000');
[NULL]
sqlite> select date('2010-12-13 23:03:40.485012+00:00');
2010-12-13
我的生产数据库是 PostgreSQL 虽然我在本地开发/测试 sqlite3.
这是个坏主意。使用您用于生产的同一数据库进行测试。
【讨论】:
【参考方案2】:对于 PostgreSQL,您可以使用:
CAST(updated_at AS DATE)
【讨论】:
谢谢,首先尝试在本地获取可以与 SQLite3 一起使用的东西。不知道为什么“SELECT DATE(updated_at) from Scores”不起作用。 根据 SQLLite 手册 DATE() 将字符串转换为 DATE,它不会从时间戳中提取日期。有点跑题了,但我绝不建议使用与生产环境不同的 DBMS 来测试应用程序。【参考方案3】:在 PostgreSQL 中你可以使用::
。
declare _now timestamp with time zont := now();
declare dt date := _now::date;
【讨论】:
以上是关于如何从 SQLite3 和 PostgreSQL 中的时间戳中选择日期的主要内容,如果未能解决你的问题,请参考以下文章
在迁移中更改自动增量值(PostgreSQL 和 SQLite3)
PostgreSQL Node.js 服务器中的 SQLite3 each() 函数的等价物?
Django 迁移:sqlite3 开发数据库、Amazon Elastic Beanstalk 和 Amazon RDS postgresql 实时数据库
Django shift to PostgreSQL 无法导入fixture,说明数据太长