我想从我正在使用代码行的列中获取第n个字,它对我有用,但是存在问题,例如:
第一行是:“数据库中的第N个单词”
第二行是:“从数据库中返回第N个单词,并返回更多单词”
当我搜索第6个单词“ database”时,它返回我的第一行和第二行,但是我不想得到我的第一行,因为它只有5个单词。 谢谢大家
我的代码行:
SELECT *,
SUBSTRING_INDEX(SUBSTRING_INDEX(`Text`, ' ', 6), ' ', -1) as Nth
FROM `tbl_name`
答案 0 :(得分:1)
句子中有六个单词意味着您必须至少有五个空格,添加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`
答案 1 :(得分:0)
您应该使用where子句更新查询,在该子句中可以通过以下查询计算字数。
SELECT *, SUBSTRING_INDEX(SUBSTRING_INDEX(`Text`, ' ', 6), ' ', -1) as Nth
FROM `tbl_name`
where (COUNT(column1) - LENGTH(replace(column1, ' ', '')) > 5
答案 2 :(得分:0)
您应该对空格或任何一个要占用的字符串进行计数,然后在该计数上加上从句。
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