これは、問題なく機能するライブラリを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ステートメントは実際に有効なものであるため