需求如下:
有一个教学周历,每个月的第一天显示月份,比如九月、十月、十一月。该月其余的日期直接显示“日”即可。
举例:
原数据 | 显示值 |
---|---|
2022-07-12 | 12 |
2022-08-01 | 八月 |
2022-09-02 | 02 |
2022-10-11 | 11 |
2022-11-01 | 十一月 |
方法一:
以字符串的方式来进行处理(不推荐)。
- 通过函数
substr()
获取到最后 2 位,即“日”。 - 通过函数
instr()
和substr()
获取到 2 个-
分隔符中间的月份。 - 判断“日”是否为
01
,若是则把对应的月份显示为中文,否则直接显示“日”。
踩过的坑:
- 代码量大。
- 月份转为中文的逻辑,单独用一个函数处理会更清晰。
方法二:
转化为 date
类型再处理(推荐,代码简洁明了)。
- 转化为
date
类型。 - 通过
to_char(date, 'mm')
或者extract(month from date)
直接获取月份。 - 同理可以直接获取“日”的值。
- 最后,判断“日”的值,分别进行显示。
小细节:
to_char(date, mm)
获取的月和日,都有前置0
;而extract()
函数直接获取的没有前置的0
。1~12
月转中文的逻辑,并不能直接使用阿拉伯数字0~9
转中文的做法,不能正常处理十月、十一月和十二月(直接用 if-else 嘿嘿)。