mysql - 从列中提取字母和数字部分

标签 mysql sql parsing alphanumeric

我有一个表 tab1,其中有一列 col1 具有复合字母加数字值,如下所示:

abc123
xy45
def6
z9

我需要将值提取为查询中的单独列,其中数字部分位于整数数据类型的列中。

如果这两个值的开始和结束位置一致,则可以使用 substring() 完成这项工作,因为您可以看到数字部分的开始有所不同。

是否有一种优雅的方法来解决这个问题,或者必须通过使用正则表达式匹配来分隔案例的每个可能起点的一系列联合来完成,或者在一个巨大的案例声明中汇总?

最佳答案

是的,它是:

SELECT
  @col:=col1 AS col, 
  @num:=REVERSE(CAST(REVERSE(@col) AS UNSIGNED)) AS num,
  SUBSTRING_INDEX(@col, @num, 1) AS word
FROM
  tab1

- 仅当您的列包含字母然后是数字(如您所描述的)时才有效。这就是为什么双 REVERSE()是必需的(否则 CAST() 将无效)。检查这个demo .

关于mysql - 从列中提取字母和数字部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20898775/

相关文章:

sql - 是否有可用于 SQL 的 BNF 语法?

java - Univocity CSV 解析器在单个 CSV 中包含多行的多个 bean

mysql - 更新表,然后删除行(如果未设置)

mysql - 在将它用于 HAVING 子句时如何从 SELECT 语句中省略一个列?

mysql - ORDER BY 2 个参数 PDO

MySQL - 对多个表的值进行计数并合并结果

mysql - 从 2 个表中选择的最简单方法,第二个是 where 条件

c# - 使用 JsonSerializer 有选择地读取部分 JSON 数据并填充一个 c# 对象

mysql - Doctrine2 findOneBy 返回错误结果

php - laravel - 使用外键查询