2017-03-14 23 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