Использование функций с запросом выбора 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

Другие вопросы по тегам