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

相关推荐
雪碧聊技术20 分钟前
存储过程的介绍、基本语法、delimiter的使用
数据库·存储过程的基本语法·delimiter的使用
_码农121381 小时前
spring boot 使用mybatis简单连接数据库+连表查询
数据库·spring boot·mybatis
IvorySQL2 小时前
PGSQL运维优化:提升vacuum执行时间观测能力
运维·postgresql·开源·开源数据库·ivorysql
掘根3 小时前
【MySQL集群架构与实践5】使用Docker实现水平分片
mysql·docker·架构
TTBIGDATA4 小时前
【支持Ubuntu22】Ambari3.0.0+Bigtop3.2.0——Step7—Mariadb初始化
数据库·ambari·hdp·mariadb·bigtop·ttbigdata·hidataplus
大得3694 小时前
django的数据库原生操作sql
数据库·sql·django
tuokuac4 小时前
SQL中的HAVING用法
数据库·sql
爬山算法4 小时前
MySQL(173)MySQL中的存储过程和函数有什么区别?
数据库·mysql
jnrjian4 小时前
利用trigger对大表在线同步 UDI
数据库·sql
Ruimin05194 小时前
Mysql集群技术
数据库·mysql