【问题标题】:Using DATEPART into a Slick Query在 Slick 查询中使用 DATEPART
【发布时间】:2017-08-04 23:34:14
【问题描述】:

我正在尝试将 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 ?

更新

我检查了 slick 生成的 SQL 语句,我注意到它尝试将参数传递给 DATEPART:

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

应该是这样的:

DATEPART(mm,x2."data_emissao")

我怎样才能通过 mm 而不是 'mm'

【问题讨论】:

    标签: sql-server scala slick datepart


    【解决方案1】:
    datePart("mm"
    

    应该是

    datePart(mm
    

    【讨论】:

    • 嗨!如果是纯 SQL 会是这样。我正在使用映射到 SQL 函数的 scala 函数。如果我尝试使用 mm 而不是“mm”,则代码不会编译,因为 mm 未定义。
    • 你是正确的,但是我如何在没有 ' ' 的情况下通过 slick 将它传递给 SQL??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多