首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >postgresql:以文本形式存储的时间。如何对时间进行查询

postgresql:以文本形式存储的时间。如何对时间进行查询
EN

Stack Overflow用户
提问于 2021-01-16 11:58:15
回答 2查看 194关注 0票数 0

我有一个名为device的表,它具有以下数据类型

代码语言:javascript
运行
复制
device table:

column        Type
id            integer
created       text
name          text

这里,时间存储在text类型中,而不是timestamp类型中。

created12/19/2020 20:40:23

我试着询问这个日期时间。

代码语言:javascript
运行
复制
SELECT "device"."id",
       "device"."created",
       "device"."name",
FROM "device"
WHERE "device"."created" < '12/19/2020 20:40:23'
LIMIT 21

结果与日期时间顺序不同。可能是比较了一些文本字符串。

那么,在本例中,获得数据w.r.t时间的最佳解决方案是什么,即使其存储为文本

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-16 12:05:57

您需要将文本转换为时间戳。在这种情况下,一个简单的转换就足够了。

代码语言:javascript
运行
复制
SELECT device.id,
       device.created,
       device.name,
FROM device
WHERE device.created::timestamp < '12/19/2020 20:40:23'
LIMIT 21
票数 0
EN

Stack Overflow用户

发布于 2021-01-16 13:17:59

这是因为字符串是按字典顺序进行比较的。使用带有格式规范字符串的to_timestamp将文本转换为时间戳,然后比较时间戳。

如果您根据ISO-8601格式化日期-时间字符串,那么可以直接将它们转换为时间戳。

除非这是(外国的?)表超出您的控制范围,不要将时间戳存储为格式化文本。

代码语言:javascript
运行
复制
SELECT id, created, name
FROM device
WHERE to_timestamp(created, 'mm/dd/yyyy hh24:mi:ss') < '2020-12-19 20:40:23'::timestamp
LIMIT 21;

顺便说一句你不需要引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65749389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档