2014-01-07 56 views
1

我使用Slick 2.0.0-RC1和PostgreSQL。在創建選擇查詢時,如何比較Timestamp列。假設我現在正在嘗試使用開始日期進行簡單查詢和獲取事件。斯卡拉油滑2.0與PosgreSQL。比較時間戳

我在我的表有列:

val start: Column[Option[Timestamp]] = column("start") 

查詢片段:

val now = new java.sql.Timestamp(new java.util.Date().getTime) 

val q = for { 
    event <- events 
    date <- eventDates if event.id === date.id; if date.start > now 
} yield (event, date) 

它編譯成類似:

AND (x16."start" >= {ts '2014-01-01 00:00:00.0'})) 

而這似乎是Postgres的非法語法。我怎樣才能做到這一點?

+0

我們不能生產這個,你使用的是哪個版本的Postgres? – cvogt

+0

PostgreSQL 9.2.4/w 9.3-1100-jdbc41驅動程序 – selfsx

+0

我們不能用postgres 9.1或9.3.2重現語法錯誤。請嘗試其中之一,看看它是否仍然是你的問題。 – cvogt

回答

2

的SQL的OP報價:

AND (x16."start" >= {ts '2014-01-01 00:00:00.0'}))

是不實際的SQL Postgres所運行。這是JDBC SQL,它利用的ODBC格式:

{ts

如果試圖直接通過psql裏運行該SQL,它會抱怨的

ERROR: syntax error at or near "{"

我不知道最終的Postgres的SQL會是,但我認爲JDBC其轉換爲類似

AND (x16.start > timestamp '2014-01-01 00:00:00.0') 

所以實際上由油滑報告的SQL是正確的。

我剛剛下了這個兔子洞,增加了分心(但有用)使用https://github.com/tototoshi/slick-joda-mapper而不是直接時間戳。最後,我的問題的根本原因是另一列,而不是錯誤配置的時間戳列。