MySQL查询计数单词出现提供不稳定的结果

时间:2019-07-16 09:09:55

标签: mysql sql select replace

这是我的表创建语句:

CREATE TABLE `mytable` (
  `id` int(11) NOT NULL,
  `value` longtext,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

以下是一些示例数据:

id, value
-----------------------------
'1', '__cccccccc; Myword'
'2', '__ddddddd; Myword'
'3', 'OOO; myword; anotherword'

这是我的查询,旨在计算以下字符串(包括分号和开头的空格):; myword出现在记录中的次数:

select `mytable`.`value`, length(`mytable`.`value`) as 'string length', length(replace(`mytable`.`value`,'; myword','')) as 'after replace', 
(length(replace(`mytable`.`value`,'; myword',''))-length(`mytable`.`value`)) as 'after sub', 
(length(replace(`mytable`.`value`,'; myword',''))-length(`mytable`.`value`))/8 as 'after divide'
from `test`.`mytable`
where LOWER(`mytable`.`value`) like ('%; myword%') OR LOWER(`mytable`.`value`) like ('%; myword');

我得到的结果:

'__cccccccc; Myword', '18', '18', '0', '0.0000'
'__ddddddd; Myword', '17', '17', '0', '0.0000'
'OOO; myword; anotherword', '24', '16', '-8', '-1.0000'

第一个问题,如结果所示,在第一条和第二条记录中,未找到单词myword,但实际上它存在。为什么不计算?

第二个问题,在最后一条记录中,结果为负。为什么?我减去16-24应该是8。

0 个答案:

没有答案