如何从数据库中获取特定单词之间的单词数。 例如
-----------------------------------------------
| ID | DESCRIPTION |
-----------------------------------------------
| 1 | Back to the drawing board. |
| 2 | Actions speak louder than words |
| 3 | Board is very large to carry |
-----------------------------------------------
当我在描述字段中搜索“to”和“board”时,我需要 以下输出:
----------------------
| ID | COUNT |
----------------------
| 1 | 2 |
| 2 | 0 |
| 3 | 3 |
----------------------
有没有办法用MySQL实现这种类型的输出。
答案 0 :(得分:0)
您可以通过以下方式找到每个单词的位置 - 假设单词之间只有一个空格 -
select (length(substring_index(concat(' ', description, ' '), ' to ', 1)) -
length(replace(substring_index(concat(' ', description, ' '), ' to ', 1), ' ', '')
) as to_pos
然后你可以把它结合起来得到你想要的东西:
select (case when description like '%to%board%'
then (length(substring_index(concat(' ', description, ' '), ' board ', 1)) -
length(replace(substring_index(concat(' ', description, ' '), ' board ', 1), ' ', '')
) -
(length(substring_index(concat(' ', description, ' '), 'to', 1)) -
length(replace(substring_index(description, ' to ', 1), ' ', '')
)
when description like '%board%to%'
then (length(substring_index(concat(' ', description, ' '), ' to ', 1)) -
length(replace(substring_index(concat(' ', description, ' '), ' to ', 1), ' ', '')
) -
(length(substring_index(concat(' ', description, ' '), ' board ', 1)) -
length(replace(substring_index(concat(' ', description, ' '), ' board ', 1), ' ', '')
)
end)
如果两个单词之间没有多个空格,这实际上可以使用多个空格。多个空格可以在之前或之后。