使用 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+ 个空格
我有一个 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+ 个空格