使用 MySQL 提取和 return 不同的字母值
Extract and return distinct alphabetic values with MySQL
简介
我正在创建一个自动完成街道名称应用程序。假设下面是列条目(街道名称),它们仅在街道编号上有所不同。
- Ahnewinkelstr。 1
- Ahnewinkelstr。 32B
- Ahnewinkelstr。 36
- Ahnewinkelstr。 37
- Ahnewinkelstr。 39
- 汉斯斯特。 3
- 汉斯斯特。 6
- 汉斯斯特。 128
现在我想 MySQL 只提取街道名称的第一个字母部分 并且 在第一个数字字符 和 return 提取的不同街道名称列表。
结果应该类似于
- Ahnewinkelstr。
- Hansstr.
你觉得可行吗?在我尝试使用 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
如果没有正则表达式替换(正如已经展示的那样),您可能需要做一些丑陋的事情,而且可能很慢,就像这样:
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 ....
简介
我正在创建一个自动完成街道名称应用程序。假设下面是列条目(街道名称),它们仅在街道编号上有所不同。
- Ahnewinkelstr。 1
- Ahnewinkelstr。 32B
- Ahnewinkelstr。 36
- Ahnewinkelstr。 37
- Ahnewinkelstr。 39
- 汉斯斯特。 3
- 汉斯斯特。 6
- 汉斯斯特。 128
现在我想 MySQL 只提取街道名称的第一个字母部分 并且 在第一个数字字符 和 return 提取的不同街道名称列表。
结果应该类似于
- Ahnewinkelstr。
- Hansstr.
你觉得可行吗?在我尝试使用 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
如果没有正则表达式替换(正如已经展示的那样),您可能需要做一些丑陋的事情,而且可能很慢,就像这样:
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 ....