Выборка из базы данных (строки)

Как осуществить выборку из таблицы всех строк:
1) состоящих более из 7 слов
2) содержащих только символы от 'a' до 'z', от 'а' до 'я', цифры и знак '-'
  • Вопрос задан
  • 3180 просмотров
Пригласить эксперта
Ответы на вопрос 5
deadkrolik
@deadkrolik
1. содержащих 6 или более разделителей слов
2. возможно регулярные выражения
Ответ написан
Комментировать
@OldFornit
postgresmen.ru/articles/view/33
ну и дальше в оригинальную документацию
www.postgresql.org/docs/8.3/static/functions-matching.html
Ответ написан
Комментировать
nojoke
@nojoke Автор вопроса
1) SELECT * FROM «public».words WHERE key_word !~* '[0-9a-zа… я]\-\r\n\20' LIMIT 10
Находит все подряд, включая нужное и ненужное.

2) Поиск 6 разделителей (пробелы ): SELECT * FROM «public».words WHERE key_word ~* '\20{6,}' LIMIT 10
Вообще не работает (ищет пробелы подряд ?)
Ответ написан
Комментировать
deadkrolik
@deadkrolik
Либо жестко прописать: (любые_символы)(разделители)(любые_символы)(разделители)(любые_символы)(разделители)(любые_символы)(разделители)(любые_символы)(разделители)(любые_символы) как большое регулярное выражение. Либо что-то хитрее, типа: ((любые_символы)(разеделители)){6}
Ответ написан
Комментировать
@ztxn
1) состоящих более из 7 слов

Без регекспов:
Если разделители пробелы, количество слов = length(str)-length(replace(str,' ','')) + 1
Убрать дублирующиеся пробелы можно как-то так: replace(replace(replace(str,' ','~ '),' ~',''),'~','')

select *
from (select str,replace(replace(replace(str,' ','~ '),' ~',''),'~','') sstr from t) s
where length(sstr)-length(replace(sstr,' ','')) +1 > 7

Регекспами:
select * from t where ' '||str ~ '(\s+\S+){8,}'

2) содержащих только символы от 'a' до 'z', от 'а' до 'я', цифры и знак '-'

select * from t where str ~ '^[-\w\dа-я]+$'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы