たとえば、タイムスタンプと継続時間の両方が秒を表すこの単純化モデルがあります。上記Slick 3の異なるタイプの列で算術演算を使用してレコードをフィルタリングする方法
case class Item(id: Int, : Long, duration: Int)
val max_timestmap: Long = ??? val stmt = items.filter(x => (x.timestamp + x.duration) <= max_timestamp) db.run(stmt.result)
私は苦労の理解を持っていることを、次のエラーでコンパイルされません。
ambiguous implicit values: [error] both value BooleanOptionColumnCanBeQueryCondition in object CanBeQueryCondition of type => slick.lifted.CanBeQueryCondition[slick.lifted.Rep[Option[Boolean]]] [error] and value BooleanCanBeQueryCondition in object CanBeQueryCondition of type => slick.lifted.CanBeQueryCondition[Boolean] [error] match expected type slick.lifted.CanBeQueryCondition[Nothing] [error] filter(x => (x.timestamp + x.duration) <= max_timestamp)
アップデート1: timestamp
が長く、duration
がintであるという事実のために茎の問題のように思えます。両方が同じデータ型の場合、コンパイルされているようです。
更新2: この解決策が機能することが判明しました。スリックドキュメントCOMING FROM SQL TO SLICKによるとx.duration.asColumnOf[Long]
'(p => p.age <= 23)'は機能しますか?あなたは輸入がないのですか? – nmat
継続時間はintですか?それは何を意味しますか?分、秒、時の数ですか?すべてを同じタイプに変換してください – nmat
はい、時間は秒単位であり、表のように表されます。テーブルの現在のデータ型を変更せずに変換を行うことは可能ですか? –