使用 SQL REGEXP 忽略数字并仅获取字符串和 '/'

Use SQL REGEXP to ignore number and get only String and '/'

我有一个 MySQL table 和一个 varchar(255) 类型的列,其中包含以下格式的数据:

400 mg
50/12,5 mg/ml
20 mikrog
500 mg/400 IU
60 mikrog/15 mikrog

我需要忽略数字,只提取字符串,在某些情况下,包括 /,因此上面的数据如下所示:

mg
mg/ml
mikrog
mg/IU
mikrog/mikrog

我试过这样使用 REGEXP

SELECT DISTINCT REGEXP_SUBSTR(column, '[a-z]') FROM db.table;

但是,这只是给了我一堆字母,就像这样

m
I
U
a
g
k

有没有什么办法可以用REGEXP提取任意长度的String,我的情况下,需要提取的String是不同长度的,比如mg,它是 2,如果是 mikrog,它是 6。另外,在某些情况下,我需要包含字符 /.

如果你想使用正则表达式

尝试使用[a-z]*只获取所有字母, 或 [a-z]*\/[a-z]* 得到斜线。

看看here并测试一些例子

最简单的方法是使用 instr()substring()

select substring(col, instr(col, ' '))
from your_table

SQLFiddle demo

您可以删除号码以获得您需要的号码:

REGEXP_REPLACE(column, ' *[0-9]+([.,][0-9]+)?(/[0-9]+([.,][0-9]+)?)? *', '')

参见regex demo

详情

  • * - 0+ 个空格
  • [0-9]+ - 1+ 位数
  • ([.,][0-9]+)? - 可选的逗号或句点序列,后跟 1+ 个数字
  • (/[0-9]+([.,][0-9]+)?)? - / 的可选序列,然后是 1+ 位数字,后跟可选的 ., 和 1+ 位数字
  • * - 0+ 个空格