我有一个名为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
这结果是不是按照每日期时间顺序.它可能是比较一些文本字符串.
那么,在这种情况下,即使数据以文本形式存储,获取数据的最佳解决方案是什么
3条答案
按热度按时间tjvv9vkg1#
这是因为字符串是按字典顺序比较的,使用
to_timestamp
和格式说明字符串将文本转换为时间戳,然后比较时间戳。如果您根据ISO-8601化日期-时间字符串,那么您可以将它们直接转换为timestamp。
除非这是您无法控制的(外来?)表,否则 * 不要 * 将时间戳存储为格式化文本。
顺便说一句,你不需要引用。
vsikbqxv2#
你需要把文本转换成时间戳。在这种情况下,简单的转换就足够了。
mefy6pfw3#
在这种情况下,最好的解决方案是使用
ALTER TABLE
语句将created
列从文本转换为时间戳。这将允许您在查询表时使用正确的日期和时间函数及运算符,从而确保结果按正确的顺序排序。例如,可以使用以下SQL语句将
created
列转换为时间戳:此语句使用
to_timestamp
函数将created
列中的文本值转换为使用MM/DD/YYYY HH24:MI:SS
的时间戳,该格式与文本日期的格式相匹配。完成此更改后,现在可以使用适当的日期和时间函数及运算符查询表,如下所示: