2016-11-03 3 views
0

Я действительно хочу вычислить продолжительность и отсортировать результаты по убыванию.Как найти продолжительность от startTime и endTime [DateTime] через slick

Я попытался,

db.run(totalSuccess.sortBy(ele => computeDuration(ele.startedOn, ele.completedOn).desc)) 

private def computeDuration(d1: Option[DateTime], d2: Option[DateTime]) = (d1, d2) match { 
    case (Some(d1),Some(d2)) => new Period(d1, d2, PeriodType.hours()) 
    case _ => None 
} 

Получение ошибки несоответствия типов, где ele.startedOn является Rep[Option[DateTime] и computeDuration ожидает Option[DateTime].

Будет ли это работать? или есть другой простой способ сделать это.

+0

Нет, это не будет работать. Вы должны помнить о действиях DB IO в Slick generate SQL. Хотя API выглядит как стандартный код scala, вы не можете использовать произвольные типы, если они явно не поддерживаются Slick. В вашем случае вам нужно определить функцию Slick для вычисления интервалов, которая будет отображаться в исходной SQL-функции. Можете ли вы опубликовать полный образец кода, который компилируется? – user3588254

ответ

0

Сделайте это на уровне базы данных, используя функции базы данных.

def diff(d1: Rep[DateTime], d2: Rep[DateTime]): Rep[Long] = { 
    SimpleFunction.binary[DateTime, DateTime, Long]("datediff").apply(d1, d2) 
} 

заменить datediff с соответствующей функцией базы данных для решения базы данных

 Смежные вопросы

  • Нет связанных вопросов^_^