我想从使用代码行的列中获取第n个单词,这对我很有用,但有一个问题,例如:第一行是:“数据库中的第n个单词”第二行是:“从数据库返回第n个单词和更多单词”当我搜索第6个单词“database”时,它会返回我的第一行和第二行,但我不想得到我的第一行,因为它只有5个单词。谢谢大家我的代码行:
SELECT *, SUBSTRING_INDEX(SUBSTRING_INDEX(`Text`, ' ', 6), ' ', -1) as Nth FROM `tbl_name`
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`
另一个演示。
hfwmuf9z2#
您应该用where子句更新查询,在where中您可以通过下面的查询来计算字数。
SELECT *, SUBSTRING_INDEX(SUBSTRING_INDEX(`Text`, ' ', 6), ' ', -1) as Nth FROM `tbl_name` where (COUNT(column1) - LENGTH(replace(column1, ' ', '')) > 5
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
3条答案
按热度按时间xzabzqsa1#
句子中有六个单词意味着你至少要有五个空格,添加simlpe条件可以解决你的问题:
我还更改了您的查询,因为它没有考虑到您可能没有第6个空格(正好是6个单词)。
演示
或者更简洁:
另一个演示。
hfwmuf9z2#
您应该用where子句更新查询,在where中您可以通过下面的查询来计算字数。
tp5buhyn3#
您应该对空格或任何字符串进行计数,然后需要对该计数应用having子句。