Mysql 使用SQL REGEXP忽略数字,只获取字符串和'/';
我有一个MySQL表,其列的类型为Mysql 使用SQL REGEXP忽略数字,只获取字符串和'/';,mysql,regex,mysql-8.0,Mysql,Regex,Mysql 8.0,我有一个MySQL表,其列的类型为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 SELECT DISTINCT REGEXP_SUBSTR(column, '[a-z]') FROM db.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
SELECT DISTINCT REGEXP_SUBSTR(column, '[a-z]') FROM db.table;
我试着像这样使用REGEXP
:
mg
mg/ml
mikrog
mg/IU
mikrog/mikrog
SELECT DISTINCT REGEXP_SUBSTR(column, '[a-z]') FROM db.table;
但是,这只是给了我一堆信,像这样
m
I
U
a
g
k
是否有任何方法可以使用
REGEXP
提取任意长度的字符串,就像在我的例子中,需要提取的字符串的长度是可变的,例如,在mg
的情况下,它是2
,在mikrog
的情况下,它是6
。此外,在某些情况下,如果要使用regexp,我需要包含字符/
尝试使用[a-z]*
仅获取所有字母,
或者[a-z]*\/[a-z]*
以获得连斜杠
查看并测试一些示例最简单的方法是使用
instr()
和substring()
您可以删除这些号码以获得所需:
REGEXP_REPLACE(column, ' *[0-9]+([.,][0-9]+)?(/[0-9]+([.,][0-9]+)?)? *', '')
看
详细信息
-0+空格*
-1+位[0-9]+
-逗号或句点的可选序列,后跟1+位([,][0-9]+)?
-一个可选的序列,由一个(/[0-9]+([,][0-9]+)?)
和1+个数字组成,然后可选地后跟/
或
和1+个数字,
-0+空格*