2015-03-17 5 views
2

Я работаю в java и postgresql.
У меня есть одно имя таблицы «видео», а одно из полей в нем - имя «video_name», поэтому имя видео может содержать значения #tag, например, ex.извлекать только связанные значения хэштегов из имени в функции поиска

  1. мой любимчик звезда #tom
  2. пользуются выходные #friends#party Masti
  3. обедали #seefood с #friends
  4. прогулка с #friendsEnjoy

так что теперь в этом случае я хочу, чтобы поиск по этому поле 'video_name' только с хэштегами. если я ищу #friends, я получу номер 2,3 видео.

я хотел бы знать, каким должен быть запрос в этом случае

я попытался с помощью запроса

select * from videos where video_name ilike '%#Friends' 

но это не дает мне точные результаты.

Я также попытался использовать этот запрос

select * from videos where video_name ~* '#friends' 

но с использованием выше запроса я получил 3 результаты 2,3,4. и я хочу только 2 & 3.

/******************************* ANSWER ***** ******************************/

Ниже представлен ответ на этот вопрос. спасибо @Alex видео, которые включают хэштег с пространством впереди строки и снова новый #tag впереди этой строки.

SELECT * 
FROM videos 
WHERE lower(video_name) SIMILAR TO '%#friends(\s%|\#%)?' 

ответ

1
SELECT * 
FROM videos 
WHERE video_name REGEXP '#friends' 

и here является PostgreSQL версии, если вам нужно:

SELECT * 
FROM videos 
WHERE video_name SIMILAR TO '%#friends%' 

и here является примером того, как разрешить дело чуткость

SELECT * 
FROM videos 
WHERE lower(video_name) SIMILAR TO '%#friends%' 

EDIT И another variant с космической проверки :

SELECT * 
FROM videos 
WHERE lower(video_name) SIMILAR TO '%friends(\s%|\#%)?' 
+0

Это не работает в postgresql. – Kamini

+0

@ Kamini проверить обновленный ответ – Alex

+0

вы проверили мой обновленный вопрос. в результате чего я исключаю. В соответствии с вашим ответом сначала это чувствительно к регистру, а затем, если я использовал ilike для удаления чувствительности к регистру, все равно я не получаю результат, который, как я полагаю, должен иметь. Спасибо за ваш ответ :) – Kamini