🚀 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 |