从数据库返回第n个单词

8qgya5xd  于 2021-06-20  发布在  Mysql
关注(0)|答案(3)|浏览(263)

我想从使用代码行的列中获取第n个单词,这对我很有用,但有一个问题,例如:
第一行是:“数据库中的第n个单词”
第二行是:“从数据库返回第n个单词和更多单词”
当我搜索第6个单词“database”时,它会返回我的第一行和第二行,但我不想得到我的第一行,因为它只有5个单词。谢谢大家
我的代码行:

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

xzabzqsa1#

句子中有六个单词意味着你至少要有五个空格,添加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个空格(正好是6个单词)。
演示
或者更简洁:

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

另一个演示。

hfwmuf9z

hfwmuf9z2#

您应该用where子句更新查询,在where中您可以通过下面的查询来计算字数。

SELECT *, SUBSTRING_INDEX(SUBSTRING_INDEX(`Text`, ' ', 6), ' ', -1) as Nth 
FROM `tbl_name` 
where (COUNT(column1) - LENGTH(replace(column1, ' ', '')) > 5
tp5buhyn

tp5buhyn3#

您应该对空格或任何字符串进行计数,然后需要对该计数应用having子句。

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

相关问题