Использование функций с запросом выбора orientdb с краевым фильтром
Схема
Клиент -> (Edge)Ownes -> Автомобиль {номер_карты}
попытался запросить запись клиента, который "владеет" транспортным средством по его номеру, как показано ниже, и это сработало. (оба "в" и "содержит" работал нормально)
select from Customer where "KL-01-B-8898" in out("Ownes").vehicle_number
Я хочу сделать тот же запрос, но используя поиск без учета регистра, как показано ниже, но вернул 0 записей
select from Customer where "kl-01-b-8898" in out("Ownes").vehicle_number.toLowerCase()
Я изменил запрос, как показано ниже, и он вернул строки. Можно ли использовать такие функции, как 'toLowerCase' в запросах, как указано выше, без выбора sub?
select from Customer where @rid in (select in("Ownes").@rid from Vehicle where vehicle_number.toLowerCase() ="kl-01-b-8898")
1 ответ
Вы можете использовать это:
select from Customer
let $a= ( select number.toUpperCase() from (select out("Ownes").vehicle_number as number from $parent.$current unwind number))
where "KL-01-B-8898" in first($a).number
Это не работает:
select from Customer where "kl-01-b-8898" in out("Ownes").vehicle_number.toLowerCase()
так как
out("Ownes").vehicle_number
вернуть список строк
Это работает:
select from Customer where @rid in (select in("Ownes").@rid from Vehicle where vehicle_number.toLowerCase() ="kl-01-b-8898")
потому что номер_транспорта является строкой
Смотрите документацию: http://orientdb.com/docs/last/SQL-Methods.html