簡體   English   中英

postgresql:時間存儲為文本。 如何查詢時間

[英]postgresql: time stored as text. how to query with respect to time

我有一個名為 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 時間的最佳解決方案是什么,盡管它存儲為文本

那是因為字符串是按字典順序比較的。 使用帶有格式規范字符串的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;

順便說一句,您不需要引用。

您需要將文本轉換為時間戳。 在這種情況下,一個簡單的轉換就足夠了。

SELECT device.id,
       device.created,
       device.name,
FROM device
WHERE device.created::timestamp < '12/19/2020 20:40:23'
LIMIT 21

在這種情況下,最好的解決方案是使用 ALTER TABLE 語句將“創建的”列從文本轉換為時間戳。 這將允許您在查詢表時使用正確的日期和時間函數和運算符,確保結果以正確的順序排序。

例如,您可以使用以下 SQL 語句將“created”列轉換為時間戳:

ALTER TABLE device ALTER COLUMN created SET DATA TYPE TIMESTAMP USING to_timestamp(created, 'MM/DD/YYYY HH24:MI:SS');

此語句使用“to_timestamp”function 將“創建”列中的文本值轉換為使用與文本日期格式匹配的格式“MM/DD/YYYY HH24:MI:SS”的時間戳。

進行此更改后,您現在可以使用適當的日期和時間函數和運算符查詢表,如下所示:

SELECT "device"."id", "device"."created", "device"."name", FROM "device" WHERE "device"."created" < '12/19/2020 20:40:23' ::時間戳 ORDER BY 創建 LIMIT 21

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM