2017-08-11 7 views
1

私は '\ set'コマンドを使って変数を設定するpsqlでサーバー側(SSHを使用)を使っています。PSQL:datetimeに日付変数を渡すときの構文エラー

私の懸念はこれです:datetimeにセット文字列(日付)を挿入するクエリがありますが、構文エラーがスローされます。

簡単な例:私はあなたがにアポストロフィの3セットを設定することになっている日付を正常に知って

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

:「をFROM_DATE」と「TO_DATE」はそれに応じて設定されている

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 

正しく(私は理由を調べたことはありません)、私はdatetimeにこの日付を与えているので、私はアポストロフィを使用していないと思ったが、このエラーがスローされます:

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 day' :: interval)のようなものを方程式も明示的な型キャストなし。 – swagardson

関連する問題