如何计算两个单词之间的单词?

时间:2015-04-15 13:14:30

标签: mysql sql

如何从数据库中获取特定单词之间的单词数。 例如

-----------------------------------------------
|    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实现这种类型的输出。

1 个答案:

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

如果两个单词之间没有多个空格,这实际上可以使用多个空格。多个空格可以在之前或之后。