You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL中如何将单列混合字符串拆分至字符、数字两列?

拆分混合字符串中的字符与数字到独立列

下面针对几种主流数据库,给出直接可用的SQL语句,实现将类似A1B2C3D4的混合字符串拆分到已有的字符列和数字列:

MySQL / MariaDB

直接利用REGEXP_REPLACE函数替换掉不需要的内容:

  • 提取所有字符(去掉数字):用正则匹配数字并替换为空
  • 提取所有数字(去掉字符):用正则匹配非数字并替换为空

执行更新的SQL语句:

UPDATE your_table
SET 
    char_col = REGEXP_REPLACE(mixed_col, '[0-9]', ''),
    num_col = REGEXP_REPLACE(mixed_col, '[^0-9]', '');

注:如果字符串包含小写字母,上述语句同样适用;如果需要过滤掉其他特殊字符,可调整正则为[^a-zA-Z]来提取纯字母。

SQL Server

SQL Server 2017及以上版本可使用TRANSLATE+REPLACE的组合来实现:

  • 提取字符:把所有数字替换为占位符#,再移除所有#
  • 提取数字:把所有大小写字母替换为占位符#,再移除所有#

更新语句示例:

UPDATE your_table
SET 
    char_col = REPLACE(TRANSLATE(mixed_col, '0123456789', '##########'), '#', ''),
    num_col = REPLACE(TRANSLATE(mixed_col, 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz', REPLICATE('#', 52)), '#', '');

如果你的SQL Server版本低于2017,可创建自定义标量函数来遍历字符串提取目标内容。

PostgreSQL

同样使用正则替换函数REGEXP_REPLACE,语法略有不同:

  • \d匹配数字,'g'参数表示全局替换
  • [^\d]匹配非数字内容

更新语句:

UPDATE your_table
SET 
    char_col = REGEXP_REPLACE(mixed_col, '\d', '', 'g'),
    num_col = REGEXP_REPLACE(mixed_col, '[^\d]', '', 'g');

注意事项

  • 确保目标列char_col和num_col的长度足够容纳提取后的内容,避免截断
  • 如果混合字符串中包含除字母、数字外的其他特殊字符,需根据需求调整正则表达式规则

内容的提问来源于stack exchange,提问作者MarcusWilliams

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 15:43:23