вернуть N-е слово из базы данных - PullRequest
0 голосов
/ 30 августа 2018

Я хочу получить n-е слово из столбца. Я использую строку кода, и она работает для меня, но есть проблема, например:

Первая строка: "N-е слово из базы данных"

Вторая строка: "вернуть N-е слово из базы данных и другие слова"

Когда я ищу 6-е слово «база данных», оно возвращает мою первую и вторую строки, но я не хочу получать свою первую строку, потому что в ней всего 5 слов. спасибо всем

Моя строка кода:

SELECT *,
       SUBSTRING_INDEX(SUBSTRING_INDEX(`Text`, ' ', 6), ' ', -1) as Nth 
FROM `tbl_name`

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

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

SELECT 
    * , 
    SUBSTRING_INDEX( SUBSTRING_INDEX(  `text` ,  ' ', 6 ) ,  ' ', -1 ) AS Nth, 
    ROUND( ( LENGTH(  `text` ) - LENGTH( REPLACE(  `text` ,  " ",  "" ) ) ) / LENGTH(  " " ) ) AS countq 
FROM  `xp_test` 
HAVING 
    countq >= 5
0 голосов
/ 30 августа 2018

Наличие в предложении шести слов означает, что у вас должно быть как минимум пять пробелов, добавление условия simlpe решит вашу проблему:

select *,
       case when length(`text`) - length(replace(`text`, ' ', '')) >= 5 then
           substring_index(replace(`text`, substring_index(`text`, ' ', 5) , ''), ' ', 2)
       else null end Nth
from `tbl_name`

Также я изменил ваш запрос, потому что он не учитывал, что у вас может не быть 6-го пробела (ровно шесть слов).

Демо

Или даже более краткий:

select *,
       substring_index(substring_index(`text`, ' ', 5 - (length(`text`) - length(replace(sentence`text` ' ', ''))) - 1), ' ', 1)
from `tbl_name`

Еще одна демонстрация.

0 голосов
/ 30 августа 2018

Вы должны обновить свой запрос с помощью предложения where, где вы можете посчитать количество слов по следующему запросу.

SELECT *, SUBSTRING_INDEX(SUBSTRING_INDEX(`Text`, ' ', 6), ' ', -1) as Nth 
FROM `tbl_name` 
where (COUNT(column1) - LENGTH(replace(column1, ' ', '')) > 5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...