Использование DATEPART в Slick Query

Я пытаюсь использовать DATEPART в гладком запросе, чтобы получить сумму значений в каждом месяце года. Для этого я пытаюсь выполнить следующий запрос:

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: для datepart указан неверный параметр 1.]

Я определил функцию datePart как:

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

Атрибут даты называется dataEmissao и отображается как java.sql.Date.

Как я могу правильно передать параметры в DATEPART?

ОБНОВЛЕНИЕ

Я проверил оператор SQL, сгенерированный slick, и заметил, что он пытается передать параметр в DATEPART как:

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

пока должно быть:

DATEPART(мм,x2."data_emissao")

Как передать mm вместо 'mm'?


person RafaelTSCS    schedule 14.03.2017    source источник


Ответы (1)


datePart("mm"

Должно быть

datePart(mm
person vikjon0    schedule 14.03.2017
comment
Привет! было бы так, если бы это был чистый SQL. Я использую функцию scala, сопоставленную с функцией SQL. Если я попытаюсь использовать mm вместо mm, код не скомпилируется, потому что mm не определен. - person RafaelTSCS; 14.03.2017
comment
вы правы, но как я могу передать его в SQL через slick без '' ?? - person RafaelTSCS; 14.03.2017