PostgreSQL 与 MySQL 获取字段注释并转换为驼峰命名教程

🚀 PostgreSQL 与 MySQL 获取字段注释并转换为驼峰命名教程

✅ 适用场景

  • 自动生成前端接口字段
  • Java Bean、DTO、实体类字段自动转化
  • 自动文档或注释生成

📌 表名(虚拟示例)

我们假设有如下表结构:

sql 复制代码
CREATE TABLE user_info (
    user_id     INT COMMENT '用户ID',
    user_name   VARCHAR(50) COMMENT '用户名',
    phone_num   VARCHAR(20) COMMENT '手机号'
);

🐘 PostgreSQL 实现

🔍 1. 查询字段名、注释,并转为 camelCase

sql 复制代码
WITH field_info AS (
    SELECT
        a.attname AS column_name,
        col_description(a.attrelid, a.attnum) AS comment
    FROM
        pg_attribute a
    WHERE
        a.attrelid = 'user_info'::regclass
        AND a.attnum > 0
        AND NOT a.attisdropped
),
camel_case AS (
    SELECT
        column_name,
        comment,
        regexp_replace(initcap(replace(column_name, '_', ' ')), ' ', '', 'g') AS pascal_case
    FROM field_info
)
SELECT
    column_name,
    comment,
    lower(left(pascal_case, 1)) || substring(pascal_case from 2) AS camel_case_name
FROM camel_case;

🧪 示例输出

column_name comment camel_case_name
user_id 用户ID userId
user_name 用户名 userName
phone_num 手机号 phoneNum

🐬 MySQL 实现

🔍 1. 查询字段名、注释,并转为 camelCase

sql 复制代码
SELECT
    COLUMN_NAME AS column_name,
    COLUMN_COMMENT AS comment,
    -- 转为 PascalCase(UserName)
    REPLACE(
        CONCAT_WS('',
            UPPER(LEFT(COLUMN_NAME, 1)),
            SUBSTRING(
                REPLACE(
                    CONCAT_WS('',
                        UPPER(SUBSTRING_INDEX(COLUMN_NAME, '_', -1)),
                        SUBSTRING(COLUMN_NAME FROM LOCATE('_', COLUMN_NAME) + 1)
                    ),
                    '_',
                    ''
                ),
                2
            )
        ),
        '_',
        ''
    ) AS pascal_case,
    -- 再转为 camelCase(userName)
    CONCAT(
        LOWER(LEFT(
            REPLACE(
                CONCAT_WS('',
                    UPPER(LEFT(COLUMN_NAME, 1)),
                    SUBSTRING(
                        REPLACE(
                            CONCAT_WS('',
                                UPPER(SUBSTRING_INDEX(COLUMN_NAME, '_', -1)),
                                SUBSTRING(COLUMN_NAME FROM LOCATE('_', COLUMN_NAME) + 1)
                            ),
                            '_',
                            ''
                        ),
                        2
                    )
                ),
                '_',
                ''
            ), 1
        )),
        SUBSTRING(
            REPLACE(
                CONCAT_WS('',
                    UPPER(LEFT(COLUMN_NAME, 1)),
                    SUBSTRING(
                        REPLACE(
                            CONCAT_WS('',
                                UPPER(SUBSTRING_INDEX(COLUMN_NAME, '_', -1)),
                                SUBSTRING(COLUMN_NAME FROM LOCATE('_', COLUMN_NAME) + 1)
                            ),
                            '_',
                            ''
                        ),
                        2
                    )
                ),
                '_',
                ''
            ),
            2
        )
    ) AS camel_case_name
FROM
    information_schema.COLUMNS
WHERE
    TABLE_SCHEMA = 'your_database'     -- 替换为你的数据库名
    AND TABLE_NAME = 'user_info';      -- 替换为你的表名

推荐替代方案(更简洁): 用程序语言(如 Python、JavaScript)对字段名字符串做驼峰转换。


🧪 示例输出

column_name comment camel_case_name
user_id 用户ID userId
user_name 用户名 userName
phone_num 手机号 phoneNum

📦 衍生应用场景

需求 可使用
前端接口字段转换
Java 实体类字段构建
Python 数据类生成
自动化文档生成(Swagger)

📚 小结对比

功能项 PostgreSQL MySQL
获取字段注释 col_description() + pg_attribute information_schema.COLUMNS
获取字段名 a.attname COLUMN_NAME
表名引用 '表名'::regclass TABLE_NAME = '表名'
驼峰转换 regexp_replace + initcap 多层 REPLACE/CONCAT/UPPER/LOWER

相关推荐
Magic--7 小时前
进程间通信(IPC):原理、场景与选型
java·服务器·数据库
xhuiting7 小时前
MySQL专题总结(三)—— 补充篇
数据库·mysql
智象科技7 小时前
告警自动化赋能运维:意义与价值解析
网络·数据库·人工智能·自动化·告警·一体化运维·ai运维
源远流长jerry7 小时前
在云环境中部署 NFV:OpenStack 讲解
数据库·openstack
※DX3906※7 小时前
SpringBoot之旅4: MyBatis 操作数据库(进阶) 动态SQL+MyBatis-Plus实战,从入门到熟练,再也不踩绑定异常、SQL拼接坑
java·数据库·spring boot·spring·java-ee·maven·mybatis
J超会运8 小时前
OpenEuler系统MySQL备份恢复全攻略
mysql·mysql备份
Carino_U8 小时前
全面理解mysql架构
mysql·adb·架构
小的~~8 小时前
使用StreamLoad向Doris-4.0.3版本的聚合表导数据超时问题
运维·服务器·数据库
笑梦无境8 小时前
mysql基础篇一(多年前整理)
数据库·mysql
Yushan Bai8 小时前
HP-UX平台Oracle启动实例遭遇ORA-27300/ORA-27301/ORA-27302报错
数据库·oracle·ux