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

MySQL如何按指定长度规则对银行卡号做掩码处理并返回格式化结果

银行卡号格式化SELECT查询实现方案

以下是适配主流数据库的实现代码,核心逻辑为通过CASE WHEN判断卡号长度后,拼接固定格式掩码+真实后四位卡号,逻辑简单且性能优秀:

MySQL 版本

SELECT 
    CASE 
        WHEN LENGTH(TRIM(CAST(card_no AS CHAR))) = 16 THEN CONCAT('XXXX-XXXX-XXXX-', RIGHT(card_no, 4))
        WHEN LENGTH(TRIM(CAST(card_no AS CHAR))) = 15 THEN CONCAT('XXXX-XXXXXX-X', RIGHT(card_no, 4))
        -- 非15/16位的非标准卡号可根据业务需求调整返回逻辑,比如返回原值、空值或者非法标识
        ELSE card_no 
    END AS formatted_card_no
FROM 你的表名;

PostgreSQL 版本

SELECT 
    CASE 
        WHEN LENGTH(TRIM(card_no::VARCHAR)) = 16 THEN 'XXXX-XXXX-XXXX-' || RIGHT(card_no, 4)
        WHEN LENGTH(TRIM(card_no::VARCHAR)) = 15 THEN 'XXXX-XXXXXX-X' || RIGHT(card_no, 4)
        ELSE card_no 
    END AS formatted_card_no
FROM 你的表名;

SQL Server 版本

SELECT 
    CASE 
        WHEN LEN(TRIM(CAST(card_no AS VARCHAR))) = 16 THEN 'XXXX-XXXX-XXXX-' + RIGHT(card_no, 4)
        WHEN LEN(TRIM(CAST(card_no AS VARCHAR))) = 15 THEN 'XXXX-XXXXXX-X' + RIGHT(card_no, 4)
        ELSE card_no 
    END AS formatted_card_no
FROM 你的表名;

注意事项

  • 如果卡号存储时夹杂空格、特殊符号,可先通过正则清洗函数去除非数字字符后再做长度判断,避免逻辑出错
  • 若业务需要展示前几位BIN码,仅需将对应位置的X替换为LEFT函数截取的真实卡号前缀即可
  • 数值类型存储的卡号必须先转为字符串类型再处理,避免长度计算、RIGHT函数取值异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 04:24:03