0

これは、問題なく機能するライブラリをPostgres使用してscalaから実行するクエリですscalikejdbc

import scalikejdbc._
import java.time.LocalDate
def getRange(startDate: LocalDate, endDate: LocalDate): Unit =  {
  implicit val session: AutoSession.type = AutoSession
  log.info(s"startDate = $startDate, endDate = $endDate")
  log.info(sql"""select * from $startDate""".statement)
  val query =
    sql"""select generate_series(
      |timestamp without time zone '2021-05-01',
      |timestamp without time zone '2021-05-03',
      |'1 day'
      |) as tstamp
      |""".stripMargin
  log.info(s"query = ${query.statement}")
  log.info(s"Parameters = ${query.parameters}")
  query.map(rs => rs.string("tstamp")).list().apply().foreach(x => log.info(s"Date = $x"))
}

//-- Output --
Date = 2021-05-01 00:00:00
Date = 2021-05-02 00:00:00
Date = 2021-05-03 00:00:00

しかし、日付に文字列補間を使用するとエラーが発生します。ここで${startDate.toString}は、文字列リテラルの代わりに使用しました2021-05-01

...
def getRange(startDate: LocalDate, endDate: LocalDate): Unit =  {
...
      |timestamp without time zone ${startDate.toString},
      |timestamp without time zone '2021-05-03',
...

そして、私が得るエラーは、

SQL execution failed (Reason: ERROR: syntax error at or near "$1" Position: 53): 
select generate_series( timestamp without time zone '2021-05-01', 
timestamp without time zone '2021-05-03', '1 day' ) as tstamp

ここで何が欠けていますか?...エラーに表示されているSQLステートメントは実際に有効なものであるため

4

1 に答える 1