Postgresql

WHERE 子句將 INT 轉換為 DATETIME

  • December 15, 2017

尋找有關如何匹配兩種不同列類型的建議:

我有兩張桌子:RT-ADA-B

在兩個表下都有一個名為 的列DeliveryDate,但各個表使用不同的列類型;一個time without timezone和另一個numeric

範例:在 DA-A 表中 DeliveryDate 列顯示為:"02:00:00" 範例:在 RT-A 表中 DeliveryDate 列顯示為"2"

WHERE在SQL 語句的子句中連接彼此相等的行的正確表達式是什麼?簡單的平等顯然不適用於目前的設計:

"DA-A"."DeliveryHour" = "RT-A"."DeliveryHour"

這就是我編寫 SQL 的方式,但它的形式似乎很糟糕:

WHERE
 "DA-A"."DeliveryHour" = '2:00:00' AND 
 "RT-A"."DeliveryHour" = '2'

參考 Postgres 文件:日期/時間函式和運算符

你覺得這個怎麼樣?

WHERE date_part('hour', "DA-A"."DeliveryHour") = "RT-A"."DeliveryHour"
  • 要連接所有彼此“相等”的行:
WHERE "DA-A"."DeliveryHour"
   = '0:0'::time + "RT-A"."DeliveryHour" * interval '1h'

要麼

WHERE EXTRACT(hour FROM "DA-A"."DeliveryHour")::numeric
   = "RT-A"."DeliveryHour"

當您想在一側或另一側的查詢中使用索引時,一個或另一個可能有利於保持一側可搜尋。

  • 對於您只對 2/感興趣的情況2:00:00,您的顯式表達式可能是最佳選擇,因為這兩個表達式都是 sargable。

引用自:https://dba.stackexchange.com/questions/93173