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

标签 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

我尝试像这样使用REGEXP:

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

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

m
I
U
a
g
k

有没有办法使用REGEXP来提取任意长度的字符串,就像在我的例子中,需要提取的字符串具有不同的长度,例如,在mg<的情况下,它是 2,对于 mikrog,它是 6。另外,在某些情况下,我需要包含字符 /

最佳答案

您可以删除数字以获得所需的内容:

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 - 使用 SQL REGEXP 忽略数字并仅获取字符串和 '/',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57250535/

相关文章:

mysql - 将数据从 MySQL 提取到 MS SQL 时无法按计算的日期时间进行过滤

正则表达式字符串以匹配 R 中的列表

javascript - 数字格式化的正则表达式

javascript - 在双引号内获取值,前面有一个单词

mysql - 排除 mysql 8.0 中的重复项

MySQL 8 忽略整数长度

php - 如何将MySql代码转换为laravel代码?

更新 xampp 1.8.3-4 后,php mysql 查询未完成

mysql - '错误 1102 (42000) : Incorrect database name 'database name

mysql - 如何将 REGEXP 与字边界等转义序列一起使用?