上一篇
使用SQL的SELECT语句指定列名读取数据,通过编程语言(如Python、Java)或数据库函数对结果集进行格式化处理,如日期转换、字符串拼接或数值精度调整。
核心步骤:读取与格式化的逻辑
-
读取单列数据
通过SQL的SELECT语句指定目标列,-- 读取users表的email列 SELECT email FROM users;
多数据库兼容示例:
- MySQL/SQLite:
SELECT name FROM employees; - SQL Server:
SELECT [Name] FROM Employees;(列名含空格时用方括号) - Oracle:
SELECT "FirstName" FROM Staff;(区分大小写时用双引号)
- MySQL/SQLite:
-
格式化数据
根据需求转换原始数据格式,常见场景包括:- 日期时间 → 字符串(
2025-10-01→2025年10月01日) - 数字 → 货币(
2500→¥2,500.00) - 文本截取/拼接(
"John Doe"→"J. Doe")
- 日期时间 → 字符串(
数据库层面的格式化(高效方案)
直接在SQL查询中使用内置函数处理数据,减少应用层负担:

-
日期格式化
-- MySQL: 将birthdate转为"YYYY年MM月DD日" SELECT DATE_FORMAT(birthdate, '%Y年%m月%d日') AS formatted_birth FROM users; -- SQL Server: SELECT FORMAT(birthdate, 'yyyy年MM月dd日') AS formatted_birth FROM users; -- Oracle: SELECT TO_CHAR(birthdate, 'YYYY"年"MM"月"DD"日"') FROM users;
-
数字格式化
-- MySQL: 薪资显示千位分隔符和两位小数 SELECT FORMAT(salary, 2) AS formatted_salary FROM employees; -- 输出 50,000.00 -- PostgreSQL: SELECT TO_CHAR(salary, 'FM999,999,999.00') FROM employees;
-
文本处理

-- 拼接字符串 (所有数据库通用) SELECT CONCAT(first_name, ' ', last_name) AS full_name FROM customers; -- 截取子串 (SQL Server示例) SELECT SUBSTRING(email, 1, CHARINDEX('@', email) - 1) AS username FROM users;
应用层格式化(灵活控制)
当数据库函数无法满足复杂需求时,可在编程语言中处理:
# Python示例 (使用pandas和sqlalchemy)
import pandas as pd
from sqlalchemy import create_engine
# 1. 读取数据
engine = create_engine("mysql://user:pass@localhost/db")
df = pd.read_sql("SELECT phone FROM contacts", engine)
# 2. 格式化电话号码列
df['formatted_phone'] = df['phone'].apply(
lambda x: f"{x[:3]}-{x[3:7]}-{x[7:]}" # 12345678901 → 123-4567-8901
)
print(df)
其他语言方案:
- JavaScript (Node.js): 使用
moment格式化日期,Intl.NumberFormat处理货币 - Java:
SimpleDateFormat处理日期,DecimalFormat格式化数字
关键注意事项
-
性能优化
- 大数据量时优先在数据库层格式化(减少网络传输)
- 频繁查询的格式化结果可创建数据库视图(View)缓存
-
安全性

- 防范SQL注入:始终使用参数化查询,避免拼接SQL字符串
- 敏感数据(如身份证号)脱敏后再格式化:
CONCAT('****', RIGHT(id_number, 4))
-
跨平台兼容
- 日期/数字格式随地区变化(如
01/10/2025在美国vs欧洲含义不同) - 解决方案:
- 数据库层用标准格式(ISO 8601日期:
YYYY-MM-DD) - 应用层按用户地区本地化(如JavaScript的
toLocaleDateString())
- 数据库层用标准格式(ISO 8601日期:
- 日期/数字格式随地区变化(如
实战建议
- 简单格式化 → 用数据库函数(高效)
- 复杂业务逻辑 → 应用层处理(灵活)
- 高频访问数据 → 数据库视图 + 缓存(如Redis)
- 验证格式化结果:
-- 检查前10行格式化效果 SELECT original_column, formatted_column FROM your_table LIMIT 10;
引用说明:
- MySQL 8.0官方文档:String Functions、Date Functions
- Microsoft SQL Server文档:FORMAT函数
- Oracle TO_CHAR指南:Datatype Formatting
- OWASP SQL注入防护:Parameterized Queries
