咱们先说个很现实但又很重要的道理:数据本身经常都是“毛坯货”。一堆没整理的数字、日期或者字符串,看着就头大。想象一下有个报表,日期格式乱七八糟:有的写成01/02/2023,有的写成2023-02-01。就算是最细心的分析师也会被搞晕。这时候,数据格式化的魔法就派上用场了。
数据格式化能帮你:
- 把数据变成更好理解的样子,用起来更顺手。
- 变身数据分析小能手,快速提取你想要的信息。
- 为导出或者和别的系统集成提前准备好数据。
- 让报表和可视化更清晰、更准确。
比如你在大学工作,要做个报表,列出所有学生的全名、出生日期和院系。你不用手动拼接数据,而是写个带格式化的查询,把名字和姓氏合成一列,出生日期也用大家都能看懂的格式,比如2001年3月12日。
数据格式化的主要任务
格式化其实就像切水果拼盘。你不能直接把一堆水果扔碗里,还得切好、摆好看。在SQL里,这活分成几类:
字符串格式化
比如拼接字符串、大小写转换(全大写或全小写)、加减空格和符号啥的。
数字格式化
有时候你得把数字转成字符串,或者四舍五入到你想要的小数位数。
日期和时间处理
可以自动搞定获取当前日期、格式化时间数据,或者只提取日期的某一部分(比如只要年份或月份)。
提取唯一值
如果你报表只想显示唯一的记录(比如唯一的城市或院系),这也算数据格式化的一部分。
PostgreSQL里的格式化工具
PostgreSQL自带一堆内置函数帮你搞定数据。下面这些只是冰山一角,后面几节课我们会详细聊:
字符串格式化
CONCAT():拼接字符串。UPPER()、LOWER():改大小写。
日期和时间格式化
NOW():当前日期和时间。CURRENT_DATE:当前日期(不带时间)。DATE_PART():提取日期的部分,比如年份或月份。
类型转换
CAST():改数据类型。- 语法:
<值>::<类型>。
数据排序
ORDER BY:按一列或多列排序。DISTINCT:提取唯一值。
数据格式化示例:实际长啥样?
为了让你有点兴趣,咱们来几个例子。先从简单的开始。
例子1:字符串格式化
SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM students;
这个查询把first_name和last_name拼成一列full_name。比如学生叫"Otto",姓"Art",结果就是:"Otto Art"。
例子2:日期格式化
SELECT DATE_PART('year', date_of_birth) AS birth_year
FROM students;
这里我们只提取date_of_birth这一列的出生年份。如果数据库里的生日是2001-03-15,结果就是2001。
例子3:类型转换
SELECT birth_year::text || ' 年' AS formatted_year
FROM (
SELECT DATE_PART('year', date_of_birth) AS birth_year
FROM students
) subquery;
这个查询先提取出生年份,然后把它转成字符串,再加上" 年"。比如结果就是:2001 年。
这些都用在哪?
给经理的报表
不是所有人都想看“毛坯”数据。比如公司营收报表,金额最好用千分位分隔(1,000,000而不是1000000),日期用2025年2月21日这种格式。
给客户的报表
比如发邮件给客户:"尊敬的[姓名],您的订单N123已于2023年10月12日成功送达"。
和其他系统集成
有些表单要求特定的数据格式:日期要ISO格式,字符串要注意大小写,数字要四舍五入。
分析和可视化
你要画图表或者做可视化,没有格式化的话,图表看起来会很乱。
GO TO FULL VERSION