简介
我正在创建一个AutoComplete街道名称应用程序。假设下面是列条目(街道名称),它们仅根据街道号而不同。
现在,我希望MySQL只提取街道名称的第一个字母部分,在第一个数字字符之后省略任何内容,并返回一个提取出来的不同街道名称的列表。
结果应该是
你觉得这可行吗?在我尝试使用Hibernate搜索来实现这一点之前,这肯定太复杂了。
发布于 2018-01-29 19:37:06
在MariaDB上,您可以访问REGEX_REPLACE()。您可以编写如下查询:
SELECT DISTINCT REGEXP_REPLACE(`street`, '\\s+\\d.*$', '')
FROM `streets`结果:

发布于 2018-01-29 20:09:51
如果没有regex替换(就像已经显示的那样),您可能需要做一些丑陋的事情,而且速度可能很慢,如下所示:
SELECT SUBSTRING(theField, 0
, LEAST(
INSTR(theField, '0')
, INSTR(theField, '1')
, INSTR(theField, '2')
, INSTR(theField, '3')
, INSTR(theField, '4')
, INSTR(theField, '5')
, INSTR(theField, '6')
, INSTR(theField, '7')
, INSTR(theField, '8')
, INSTR(theField, '9')
) AS beforeNums
FROM ....发布于 2018-01-29 19:41:45
我相信你需要的选择是substring_index。这样做的想法是,它将返回基于特定值爆炸的字符串的部分内容。在您的情况下,您将运行:
SELECT DISTINCT(SUBSTRING_INDEX(Field,'.',1))
FROM your_table请参阅来自Mysql的索引引用
https://stackoverflow.com/questions/48508590
复制相似问题