2017-08-11 180 views
1

我在psql裏工作的服務器端(使用SSH),其中,I組使用「\組」命令變量語法錯誤。PSQL:使設置日期變量時成日期時間

我擔心的是這樣的:我有一個查詢在那裏我將一組串(日期)到一個日期時間,但我拋出一個語法錯誤。

簡單的例子:

SELECT 
    network_no, 
    program_no, 
    national_datetime. 
FROM 
    views 
WHERE 
    national_datetime 
    between ':from_date 06:00:00' 
    and ':to_date 05:59:59'::timestamp + '1 day'::interval 

其中「FROM_DATE」和「TO_DATE」也作了相應的設置:

\set from_date 2017-07-10 
\set to_date 2017-07-16 

我與你應該設置三套撇號的爲日期通常知道閱讀正確(我從來沒有查找的原因),但我喂這個日期到一個日期時間,所以我想用撇號將工作,但我得到這個錯誤:

ERROR: invalid input syntax for type timestamp: ":from_date 06:00:00" 
LINE 40: between ':from_date 06:00:00' 

通常在bash腳本這樣的工作,因爲它只是傳遞的字符串值,但是在這種情況下,我是否放不出或一組單引號周圍的日期值也不會傳遞值(我假設由於PSQL處理設置變量的方式。

我知道有這方面的方法,但我正在尋找一個理由爲什麼這樣的事情會發生,是否有一個簡單的方法來解決「無效輸入語法」 - 無論是通過鑄造一個變量,預先設置不同的變量,等

非常感謝!

回答

1

:from_date是一個變量,它是不是一個字符串。

這裏是一個辦法做到這一點:

date :from_date + time ' 06:00:00' 

見文件在https://www.postgresql.org/docs/9.2/static/functions-datetime.html

+0

這完美地工作。有一件事需要注意,其他人閱讀這篇文章的時候,你需要在設置變量時使用三組撇號(例如:\ set from_date'''2017-07-10''')來讀取它正確。 此外,從上面的回答結果類型將隱式計算爲時間戳,所以如果你有時間間隔的邏輯要補充的,以及,你可以添加類似(+'1一天::間隔)的方程以及沒有明確的類型轉換。 – swagardson

相關問題