我有一个名为device的表,它具有以下数据类型
device table:
column Type
id integer
created text
name text这里,时间存储在text类型中,而不是timestamp类型中。
created值12/19/2020 20:40:23
我试着询问这个日期时间。
SELECT "device"."id",
"device"."created",
"device"."name",
FROM "device"
WHERE "device"."created" < '12/19/2020 20:40:23'
LIMIT 21结果与日期时间顺序不同。可能是比较了一些文本字符串。
那么,在本例中,获得数据w.r.t时间的最佳解决方案是什么,即使其存储为文本
发布于 2021-01-16 12:05:57
您需要将文本转换为时间戳。在这种情况下,一个简单的转换就足够了。
SELECT device.id,
device.created,
device.name,
FROM device
WHERE device.created::timestamp < '12/19/2020 20:40:23'
LIMIT 21发布于 2021-01-16 13:17:59
这是因为字符串是按字典顺序进行比较的。使用带有格式规范字符串的to_timestamp将文本转换为时间戳,然后比较时间戳。
如果您根据ISO-8601格式化日期-时间字符串,那么可以直接将它们转换为时间戳。
除非这是(外国的?)表超出您的控制范围,不要将时间戳存储为格式化文本。
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;顺便说一句你不需要引用。
https://stackoverflow.com/questions/65749389
复制相似问题