使用 MySQL 提取和 return 不同的字母值

Extract and return distinct alphabetic values with MySQL

简介

我正在创建一个自动完成街道名称应用程序。假设下面是列条目(街道名称),它们仅在街道编号上有所不同。

现在我想 MySQL 只提取街道名称的第一个字母部分 并且 在第一个数字字符 和 return 提取的不同街道名称列表。

结果应该类似于

你觉得可行吗?在我尝试使用 Hibernate Search 来实现这一点之前,那确实太复杂了。

在 MariaDB 上,您可以访问 REGEX_REPLACE()。您可以编写如下查询:

SELECT DISTINCT REGEXP_REPLACE(`street`, '\s+\d.*$', '')
FROM `streets`

结果:

我相信您需要的选项是substring_index。这个想法是它将 return 部分字符串基于特定值的爆炸。在你的情况下你会 运行:

SELECT DISTINCT(SUBSTRING_INDEX(Field,'.',1))
FROM your_table

Substring_index ref from Mysql

如果没有正则表达式替换(正如已经展示的那样),您可能需要做一些丑陋的事情,而且可能很慢,就像这样:

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 ....