作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可以想到在 mysql 中执行此操作的复杂且丑陋的方法,但我正在寻找一种不错的方法。假设我有一堆学校名称,比如
Meopham County Infant School
Speldhurst Nursery School
Rainbow Pre-School
The Annex School House
Fleet Learning Zone
Dartford Grammar School
Kiddliwinks
Hextable Kindergarten
The Rocking Horse Montessori Kinder
Little Angels Day Nursery
我有一个停用词列表:
["school", "primary", "nursery", "college", "junior", "church", "cofe", "community", "infant"]
我有一个 ruby 函数“short_name”,它返回学校名称,但不包括,任何停用词的第一个实例,这样我们就可以得到
"Bower Grove School" => "Bower Grove"
"Fulston Manor School" => "Fulston Manor"
"St Johns Church Hall Play" => "St Johns"
"St Botolph's Church of England Voluntary Aided Primary School" => "St Botolph's"
"Fawkham House School" => "Fawkham House"
"Silverdale Day Nursery" => "Silverdale Day"
"Vigo Village School" => "Vigo Village"
"Sevenoaks Primary School" => "Sevenoaks"
"High Weald Academy" => "High Weald Academy"
"The Ebbsfleet Academy" => "The Ebbsfleet Academy"
没关系。我的问题是:在 mysql 中进行上述字符串处理的最简单方法是什么?
例如,如果我想通过这个短名称进行搜索,我想做类似的事情
"select * from schools where <function(name)> = 'Bower Grove'"
最简单的方法是什么<function>
?我认为使用正则表达式的 substring() 和 locate() 的某种组合是可行的方法,但看起来我不能将正则表达式与定位一起使用。
我猜正则表达式是
"school|primary|nursery|college|junior|church|cofe|community|infant"
谢谢,麦克斯
最佳答案
MySQL 确实支持正则表达式。不幸的是,它仅用于匹配。
这是一种方法:
select least(substring_index(schoolname, ' School', 1),
substring_index(schoolname, ' Primary', 1),
. . .
)
这使用 substring_index()
来提取分隔符之前的字符串的第一部分。如果分隔符不存在,您将获得整个字符串。 least()
函数将选择最短的字符串。
这假定该关键字前面有一个空格。毕竟,您可能不想为了“小天使学校”这样的名称而完全消除所有内容。
关于mysql:最好的说法是 "the string up to the first instance of any of the following keywords"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28673916/
我是一名优秀的程序员,十分优秀!