从数据库返回第N个字

时间:2018-08-30 07:08:24

标签: mysql sql database tsql mysqli

我想从我正在使用代码行的列中获取第n个字,它对我有用,但是存在问题,例如:

第一行是:“数据库中的第N个单词”

第二行是:“从数据库中返回第N个单词,并返回更多单词”

当我搜索第6个单词“ database”时,它返回我的第一行和第二行,但是我不想得到我的第一行,因为它只有5个单词。 谢谢大家

我的代码行:

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

3 个答案:

答案 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个字)。

Demo

或更简洁:

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

Another demo.

答案 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