Существует два способа управления сортировкой без учета регистра:
первый вариант удобен, если вы можете контролировать столбцы базы данных и хотите, чтобы поведение без учета регистра везде было
второй вариант хорош, если вам нужно сделать это только в нескольких контролируемых местах.
1. Сортировка столбцов
Как сказал @bmateusz, сортировка контролируется с помощью сортировки столбцов. Это может быть установлено при создании или изменении столбца (или таблицы, или, возможно, базы данных). Скорее всего, это будет c для базы данных, которую вы используете.
Учитывая H2, таблица с именами "alice" и "Bob" будет по умолчанию (в H2) сортироваться как: "Bob «сначала, затем« Алиса ».
Вы можете изменить это, когда определяете столбец:
case class Message(name: String, id: Long = 0L)
final class MessageTable(tag: Tag) extends Table[Message](tag, "message") {
def id = column[Long]("id", O.PrimaryKey, O.AutoInc)
def name = column[String]("name", O.SqlType("VARCHAR_IGNORECASE(255)") )
def * = (name, id).mapTo[Message]
}
Обратите внимание, что я указал тип столбца, который задает c для H2: VARCHAR_IGNORECASE
.
Выполнение этого кода:
val testData = List( Message("alice"), Message("Bob") )
val program = for {
_ <- messages.schema.create
_ <- messages ++= testData
results <- q.sortBy(c => c.name.asc).result
} yield results
val db = Database.forConfig("example")
try Await.result(db.run(program), 2.seconds).foreach(println)
finally db.close
... произведет порядок: "Алиса", "Боб".
База данных, которую вы используете, должна иметь страницу, описывающую ваши параметры сортировки. Примеры включают в себя:
Если вы не используете Slick для определения своих таблиц, вы, конечно, можете настроить параметры сортировки вне Slick (используя любые инструменты или команды, которые вы используете для управления схемой).
2 , Изменение регистра в вашем запросе
Хитрость для сортировки без учета регистра заключается в изменении запроса для преобразования текста в один регистр. Например:
val q = messages.sortBy(c => c.name.toLowerCase.asc)
Переключение в нижний регистр должно иметь аналогичный эффект. Приведенный выше Slick-запрос выдаст SQL по строкам:
select "name", "id" from "message" order by lcase("name"))