2017-03-14 35 views
0

我正在嘗試將DATEPART用於光滑的查詢,以給我一年中每個月的值的總和。這樣做,我想下面的查詢:使用DATEPART進入Slick查詢

val empenhado = tableReference.filter(_.cancelled.isEmpty) 
            .filter(_.unidadeGestora like unidadeGestora) 
            .filter(_.confirmado) 
            .filter(_.anoEmissao === now.get(Calendar.YEAR)) 
            .filterNot(_.id in queryEstornado) 
             .groupBy(r => datePart("mm",r.dataEmissao)) 
             .map(r => (r._1, r._2.map(r2 => r2.valorEmpenhado).sum)) 

    empenhado.run 

當我嘗試運行它,我得到的錯誤:

[SQLException: Invalid parameter 1 specified for datepart.]

我已經定義了日期部分功能:

protected val datePart = SimpleFunction.binary[String,Date,Int]("DATEPART") 

和日期屬性稱爲dataEmissao,它被映射爲java.sql.Date

如何正確地將參數傳遞給DATEPART?

UPDATE

我檢查由光滑生成的SQL語句,我注意到,它試圖將參數傳遞給DATEPART爲:

DATEPART('mm',x2."data_emissao")

,而應該是:

DATEPART(mm,x2."data_emissao")

我怎樣才能通過mm而不是'mm'

回答

0
datePart("mm" 

應該

datePart(mm 
+0

嗨!如果它是純SQL,它會是這樣的。我正在使用映射到SQL函數的scala函數。如果我嘗試使用mm而不是「mm」,則代碼不會編譯,因爲mm未定義。 – RafaelTSCS

+0

你的區域是正確的,但是我怎麼能通過沒有''? – RafaelTSCS