【问题标题】:How can I limit my query by date using ScalaQuery如何使用 ScalaQuery 按日期限制我的查询
【发布时间】:2012-10-27 20:41:13
【问题描述】:

我正在使用 Scalaquery,但在尝试根据日期字段限制查询时遇到了问题。我正在使用 Scala 2.9.2,ScalaQuery 2.9.1:0.10.0-M1 考虑以下代码:

case class MyCase (opr_date: Date)       

object MyClass extends BasicTable[MyCase]("MYTABLE") {

    def opr_date = column[Date]("OPR_DATE")
    def * = opr_date <> (MyCase, MyCase.unapply _)

    def test(date: Date) = db.withSession {

        logDebug("test date:  " + date)
        val qry = for {
                d <- MyClass if (d.opr_date === date)
        } yield d.opr_date
        logDebug(qry.selectStatement)
        qry.list
    }
}

此查询从不返回任何行。下面是调用代码:

"The data" should {
    "be available " in {

        val testDate = CommonFormat.parseDate("2012-10-27", CommonFormat.EURO_SHORT).getTime
        val records = MyClass.test2(new java.sql.Date(testDate))
        records.size must be_>(0)
    }
}

当我打印选择时,查询返回 0 行并生成以下 SQL:

SELECT "t1"."OPR_DATE" FROM "MYTABLE" "t1" WHERE ("t1"."OPR_DATE"={d '2012-10-27'}) 

我有测试日期的可用数据。如果我将 SQL 粘贴到 SQL 编辑器中并编辑日期以使其不是 JDBC 模板格式('27-Oct-2012'),则查询将返回预期的行。谁能告诉我我做错了什么?这不应该工作吗?

【问题讨论】:

  • 首先 - 你使用什么数据库?其次 - 如果您粘贴“跟随 sql”,它会返回所需的行吗?
  • 我使用的是 Oracle 数据库,是的,当我将 SQL 粘贴到客户端 (PL/SQL Developer) 时,我确实得到了预期的行。
  • 不幸的是,我没有 Oracle 可以测试,但这可能是您的日期格式不匹配。尝试使用简单的代码(例如 int 而不是日期)来尝试您的确切代码。您问题的最后一段可能是对答案的提示。切换到像 h2 这样的内存数据库并查看问题是否与 Oracle 有关应该是值得的。我知道 Slick(新的 ScalaQuery)对 Oracle 的支持尚未完成。 ScalaQuery 也可能是这种情况......

标签: scala date where scalaquery


【解决方案1】:

今天早上我发现这是一个数据问题。查询工作正常。原来我连接到了错误的服务器。我们对共享相同数据库名称的多个环境和备份系统的设置令人困惑。连接到正确的服务器后,查询按预期工作。我在我的代码和编辑器工具之间看到了不同的结果,因为它们指向不同的服务器(相同的数据库名称啊)。感谢所有花时间为我研究这个问题的人。我感谢你的努力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 2021-09-12
    • 2011-02-25
    • 1970-01-01
    相关资源
    最近更新 更多