CodeGym /课程 /SQL SELF /真实场景下数据格式化的例子

真实场景下数据格式化的例子

SQL SELF
第 5 级 , 课程 4
可用

数据库最常见的用法之一就是为报表准备数据。想象下:你在大学工作,你老板(当然他对SQL一窍不通)让你搞个学生名单,把名字和姓合并,还要把生日显示成DD-MM-YYYY格式。任务很明确:数据要整得漂漂亮亮的。SQL就是我们最靠谱的帮手。

例子1:合并名字和姓

先来把学生表students里的名字(first_name)和姓(last_name)合起来。

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name
FROM 
    students;

这里发生了啥?

  • CONCAT()把字符串拼起来。我们中间加了个空格,看起来更直观。
  • 结果存在新列full_name里。

结果可能长这样:

full_name
Otto Art
Anna Song
Pol Mac

例子2:日期格式化

现在我们再给查询加上生日的格式化。

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM 
    students;

新东西:

  • 我们对birth_date字段用了TO_CHAR()函数。
  • 格式'DD-MM-YYYY'把日期变成好看的样子(比如:25-12-2001)。

结果:

full_name formatted_birth_date
Otto Art 12-04-1995
Anna Song 03-08-1996
Pol Mac 21-11-1997

搞定!你刚刚做出了一个漂亮的报表。

为数据导出做格式化

假设你有个同事想把订单数据导出成CSV文件,方便在Excel里用。但数据库里的数据格式他用着不顺手,销售部的人还非要指定格式。比如,他们不想看到total_price字段的原始数字,而是要像$100.00这样的格式。

例子3:把数字转成货币格式

我们把orders表里的订单数据整一下,方便导出:

SELECT
    order_id,
    TO_CHAR(total_price, 'FM$999,999.00') AS formatted_price
FROM 
    orders;

TO_CHAR()这次干了啥?

  • FM(Fill Mode)去掉多余的空格。
  • $加上货币符号。
  • 999,999.00设定千分位和两位小数。

结果:

order_id formatted_price
1 $1,000.00
2 $2,500.50
3 $10.00

现在你同事可以轻松导入Excel,还能在会上夸你两句。

最终任务

这才是最有意思的。我们把你学到的技能都用上。

任务

写个查询,针对students表:

  1. 把名字和姓合成一列full_name
  2. 把生日转成DD-MM-YYYY格式。
  3. 显示学生到今天的年龄。

查询大概长这样:

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date,
    DATE_PART('year', AGE(birth_date)) AS age
FROM 
    students;

新知识点:

  • AGE(birth_date)返回当前日期和生日之间的间隔(年、月、日)。
  • DATE_PART('year', AGE(birth_date))只取出间隔里的年数。

结果:

full_name formatted_birth_date age
Otto Art 12-04-1995 28
Anna Song 03-08-1996 27
Pol Mac 21-11-1997 25

这样的报表能让最挑剔的同事都满意。

针对特定条件的格式化

有时候格式化是为了做条件或过滤。比如,查出生日在本月的学生。

例子4:按月份过滤

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM 
    students
WHERE 
    DATE_PART('month', birth_date) = DATE_PART('month', CURRENT_DATE);

怎么回事?

  • DATE_PART('month', birth_date)从生日里取出月份。
  • CURRENT_DATE给出今天的日期。我们用DATE_PART()取出月份。

格式化和排序结合

现在把学到的都用上,再加个排序。比如,做个按生日排序的学生名单。

例子5:按生日排序

SELECT
    CONCAT(first_name, ' ', last_name) AS full_name,
    TO_CHAR(birth_date, 'DD-MM-YYYY') AS formatted_birth_date
FROM 
    students
ORDER BY 
    birth_date ASC;

升序ASC会先显示年纪最大的,降序DESC会先显示最年轻的。

结合唯一值

最后来个加星号的任务。假设我们大学在好几个城市有分校,你要做个只显示学生所在城市(唯一值)的名单,还要按字母排序。

例子6:唯一值和排序

SELECT DISTINCT
    city 
FROM 
    students
ORDER BY 
    city ASC;

DISTINCT干嘛用的?

它去掉重复的,只保留每个城市一次。

为啥要这么做?

方便又好看。 数据整得美观,操作起来更顺手,老板也少问问题。

贴近真实工作。 你能自动生成报表、做导出、做漂亮的展示。

让你更值钱。 SQL不只是数据本身,更是让数据变得清晰有用的工具。

用这些技能,不只是写查询,还能做出作品!下节课我们继续深入PostgreSQL的魔法世界。

1
调查/小测验
字符串格式化第 5 级,课程 4
不可用
字符串格式化
字符串格式化
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION