2016-10-16 8 views
0

こんにちは私はlaravelとpostgresを使用している現在のタイムスタンプクエリに問題があります。私のクエリは、私はpgAdminでは、このSQLを実行するときに、それが正常に動作し、このLaravel postgres current_timestamp

select 
MIN(serving_end_time - serving_start_time) AS min_total_serving_time 
from "token_queue" inner join "token" on "token"."id" = "token_queue"."token_id" 
where "token"."generated_time" between date_trunc('hour', CURRENT_TIMESTAMP) and date_trunc('hour', CURRENT_TIMESTAMP + interval '1 hour') 

ようなSQLを生成し、この

$min_max_avg = DB::table('token_queue')        
    ->join('token', 'token.id', '=', 'token_queue.token_id')        
    ->select(DB::raw('MIN(serving_end_time - serving_start_time) AS min_total_serving_time'))              
    ->whereBetween('token.generated_time',[DB::raw("date_trunc('hour', CURRENT_TIMESTAMP)"), 
              DB::raw("date_trunc('hour', CURRENT_TIMESTAMP + interval '1 hour')")]) 
    ->first(); 

のようですが、それは私が
無効な日時フォーマットエラー与えることにlaravel:7 ERROR:timestamp型に対して無効な入力構文: "date_trunc( '時間'、CURRENT_TIMESTAMP)"

私のテーブルには、この

ようなものです

テーブルトークン

id  | generated_time 
196618 | 2016-10-15 01:02:48.963 
196619 | 2016-10-15 01:02:50.569 
196620 | 2016-10-15 01:03:12.931 
196621 | 2016-10-15 02:03:17.037 
196622 | 2016-10-15 02:22:55.782 
196623 | 2016-10-15 02:24:57.477 
196624 | 2016-10-15 03:23:00 

テーブル

token_queue
id | serving_start_time  | serving_end_time  | token_id 
1 | 2016-10-15 01:02:48.963 | 2016-10-15 01:03:02.69 | 196618 

任意の提案をありがとうございました。

+0

私はそれがあなたが思っているSQLを生成しているとは思わない。私は、プレースホルダーを含むwhere節を生成し、プレースホルダーに式を供給していると思います。 – harmic

答えて

1

私はLaravelについてよく分かりませんが、whereBetweenを呼び出すとDB :: RawはRHSで尊重されないという印象を与えてくれました。

whereRaw()を使用して、未処理SQLで必要なwhere句を追加してみてください。

->whereRaw("token.generated_time between date_trunc('hour', CURRENT_TIMESTAMP) and date_trunc('hour', CURRENT_TIMESTAMP + interval '1 hour')") 
+0

ありがとう – sanu

関連する問題