Проблема, связанная с выборкой только тех записей, где значение поля содержит только одно вхождение определенного символа в рельсах - PullRequest
0 голосов
/ 15 сентября 2018

Мне нужно написать активную запись рельсов, где предложение, где я должен выбрать те строки, где имя (имя является столбцом в моей таблице) содержит только одно вхождение символа '.'

Например,если в таблице есть две строки с именем «ab» и «abc», то мой запрос должен возвращать только строку с именем «ab».

Пожалуйста, помогите мне решить эту проблему.

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

с регулярным выражением?Вы можете попробовать это:

select * from "table" where "name" ~ '^[^\.]*\.[^\.]*$'
0 голосов
/ 17 сентября 2018

Например, вы можете удалить точки и сравнить длину.

SELECT * FROM table WHERE (char_length(name) - char_length(replace(name, '.', '')))=1

Это не очень эффективно, потому что индексы не могут быть использованы. Чтобы сделать вещи более плавными, вы можете хранить количество точек (глубину?) В своем собственном столбце с индексом и запросом на основе этого. Это можно сделать в триггере вставки / обновления или на уровне приложения, в зависимости от ситуации.

dbfiddle

...