我使用mysql的SUBSTRING()
函数和LOCATE()
来捕获某个字符串前后的"n"个字符。
例如,使用字符串"apple"。当我查询时,它工作正常,除非字符串"apple"位于字符串的开头,因为之前的10个字符可能不存在:
http://sqlfiddle.com/#!9/f41f8d/5
CREATE TABLE demo (name varchar(1000));
INSERT INTO demo (name) VALUES
("An apple a day keeps the doctor away"),
("A doctor a day keeps the apple away from the doctor");
SELECT SUBSTRING(
`name`,
LOCATE("apple",`name`) - 10, /* from 10 characters before 'string'*/
(25) /* to 10 characters after the 5 strlen string (so 10 + 5 + 10) */
)
FROM demo
WHERE name like '%apple%'
- 结果**
| r away |
| keeps the apple away from |
第二个结果正如预期的那样,但第一个-我希望它从字符串的开头开始,直到"苹果"之后的10个字符。
我的查询有什么问题,或者我该如何修复它?我还查询了数百万行,所以我假设一个子查询来检查它的位置是否小于"字符串"的长度是没有性能的?
2条答案
按热度按时间flvtvl501#
试试这个:
vwkv1x7d2#
大概是这样的