首页 > 解决方案 > MySQL查询来计算一个单词的出现提供了不稳定的结果

问题描述

这是我的表创建语句:

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。

标签: mysqlsqlselectreplace

解决方案


推荐阅读