我有一个表 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/