Postgresql
WHERE 子句將 INT 轉換為 DATETIME
尋找有關如何匹配兩種不同列類型的建議:
我有兩張桌子:
RT-A
和DA-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。