使用MySQL提取并返回不同的字母值

时间:2018-01-29 19:27:26

标签: mysql distinct text-extraction

简介

我正在创建一个AutoComplete街道名称应用。我们在下面说的是列条目(街道名称),它们只有街道号码不同。

  • Ahnewinkelstr。 1
  • Ahnewinkelstr。 32的
  • Ahnewinkelstr。 36
  • Ahnewinkelstr。 37
  • Ahnewinkelstr。 39
  • Hansstr。 3
  • Hansstr。 6
  • Hansstr。 128

现在我希望MySQL 仅提取街道名称的第一个字母部分在第一个数字字符之后省略任何内容,并返回不同街道名称的列表被提取出来。

RESULT应该看起来像

  • Ahnewinkelstr。
  • Hansstr。

你认为这是可行的吗?在我尝试使用Hibernate Search实现这一目标之前,这当然太复杂了。

3 个答案:

答案 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

请参阅Substring_index ref from Mysql