我正在创建一个AutoComplete街道名称应用。我们在下面说的是列条目(街道名称),它们只有街道号码不同。
现在我希望MySQL 仅提取街道名称的第一个字母部分,在第一个数字字符之后省略任何内容,并返回不同街道名称的列表被提取出来。
你认为这是可行的吗?在我尝试使用Hibernate Search实现这一目标之前,这当然太复杂了。
答案 0 :(得分:2)
如果没有正则表达式替换(如已经显示的那样),你可能需要做一些丑陋的事情,并且可能很慢,如下所示:
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 ....
答案 1 :(得分:1)
在MariaDB上,您可以访问REGEX_REPLACE()
。您可以编写如下查询:
SELECT DISTINCT REGEXP_REPLACE(`street`, '\\s+\\d.*$', '')
FROM `streets`
结果:
答案 2 :(得分:0)
我相信您需要的选项是substring_index
。这个想法是它将基于特定值的爆炸返回字符串的部分。在您的情况下,您将运行:
SELECT DISTINCT(SUBSTRING_INDEX(Field,'.',1))
FROM your_table