暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DEV01-GBase 8a MPP Cluster SQL 编码进阶篇之内置函数03

原创 wiserhowe 2023-09-14
650
(六)日时函数

1、日时函数概览

函数 功能
NOW, SYSDATE, CURRENT_DATE 当前日时
WEEK,WEEKOFYEAR 日期的周数
LAST_DAY 日期月份的最后一天
DATE_FORMAT 日期格式化
ADD_MONTHS 、DATE_ADD、DATE_SUB 日期偏移
DATEDIFF、TIMESTAMPDIFF 日期差值
YEAR,MONTH,DAY,WEEKDAY 提取日时元素:年、月、日,星期等
EXTRACT 提取日时元素:年、月、日及其组合等

2、当前日时函数:
(1) 获得当前日期和时间:
NOW(), SYSDATE(), CURRENT_DATETIME()
(2) 获得当前日期:
CURRENT_DATE(), CURDATE()
(3) 获得当前时间(注意:输出结果不带日期):
CURRENT_TIME()

小贴士:NOW 和 SYSDATE 函数的区别
  ① SYSDATE 返回的是该函数执行时的日期时间。
  ② NOW 返回的是语句开始执行的日期时间,在语句执行结束前不会变化。

执行以下 SQL,我们就能很清晰理解 SYSDATE 和 NOW 函数的区别:

SELECT NOW(), SYSDATE(), SLEEP(3), NOW(), SYSDATE() 3WEEK (date[,mode]): 功能:返回日期的周数。 参数:缺省参数 mode 值从 09。 |模式|周的起始天|范围|说明| |--|--|--|--| |0|Sunday|053|遇到本年的第一个周日开始,是第一周。前面的计算为第0周| |1|Monday|053|若第一周能超过3天,那么计算为本年的第一周。否则为第0周| |2|Sunday|153|遇到本年的第一个周日开始,是第一周| |3|Monday|153|假如第一周能超过3天,那么计算为本年的第一周。否则为上年度的第5x周| |4|Sunday|053|若第一周能超过3天,那么计算为本年的第一周。否则为第0周| |5|Monday|053|遇到本年的第一个星期一开始,是第一周| |6|Sunday|153|假如第一周能超过3天,那么计算为本年的第一周。否则为上年度的第5x周| |7|Monday|153|遇到本年的第一个星期一开始,是第一周| |8|Sunday|154|周日算一周的开始,并且只要有一天就算一周| |9|Monday|154|周一算一周的开始,并且只要有一天就算一周| 这么多模式记住常用的一两个即可,未来使用时根据项目需求以本章作为手册查询。我们挑两个模式分析下 mode 的含义。 |函数调用|返回值|注解| |--|--|--| WEEK('2022-1-1', 3)|52|模式 3:周一算一周的开始,这天是周六,第一周没有超过3天,<br>则结果为上年度的第52周| WEEK('2022-1-1', 9)|1|模式 9:周一算一周的开始,按照规则只要有一天就算一周,<br>则结果为第1周| 4WEEKOFYEAR (date) : 功能:返回日期的周数:1 ~ 53,等价于 WEEK 函数的 mode 3 ```sql WEEKOFYEAR('2021-1-1') # 第 52 周 WEEK('2021-1-1', 3) # 第 52 周

5、LAST_DAY (date) :
功能:返回月份日期的最后一天。

函数调用 返回值 注解
LAST_DAY(‘2019-2-10’) 2019-02-28 可以用来判断平闰年
LAST_DAY(‘2020-2-10 12:10:30’) 2020-02-29 不会理会时间
LAST_DAY(‘19-5-10’) 2019-05-31 19被视作2019
LAST_DAY(‘190510’) 2019-05-31 19被视作2019
LAST_DAY(‘2022-2-30’) NULL 不存在的日期
LAST_DAY(‘0000-01-01’) NULL 不存在的年份

6、DATE_FORMAT(date, <格式符号>):
功能:日期类型数据的格式化。
以下是所有“格式符号”个描述——

格式 描述
%a 星期名的英文缩写形式(Sun…Sat)
%b 月份的英文缩写形式(Jan…Dec)
%c 月份的数字形式(0…12)
%D 有英文后缀的某月的第几天(1st,2nd,3rd…)
%d 月份中的天数,数字形式(00…31)
%e 月份中的天数,数字形式(0…31)
%f 微秒
%H 小时,24小时制(00…23)
%h 小时,12小时制(0,1…12)
%I 小时,12小时制,个位数字前加0(01…12)
%i 分钟,数字形式(00…59)
%j 一年中的天数(001…366)
%k 小时,24小时制(0…23)
%l 小时,12小时制(1…12)
%M 月份,英文形式全拼(January…December)
%m 月份,数字形式(00…12)
%p AM或PM
%r 时间,12小时制(HH:MI:SS后面紧跟AM或PM)
%S 秒(00…59)
%s 秒(00…59)
%T 时间,24小时(HH:MI:SS)
%U 星期(00…53),星期日是一个星期的第一天
%u 星期(00…53),星期一是一个星期的第一天
%V 星期(01…53),星期日是一周的第一天。与%X一起使用
%v 星期(01…53),星期一是一周的第一天。与%x一起使用
%W 星期名的英文全拼形式(Sunday…Saturday)
%w 一星期中的哪一天(0=Sunday…6=Saturday)
%X 以4位数字形式反映周所在的年份,星期日周的第一天
%x 同 %X
%Y 4位数字形式表达的年份
%y 2位数字形式表达的年份
%% 一个 %

示例:

函数调用 返回值
DATE_FORMAT(NOW(), ‘%Y年%m月%d日’) 2022年03月19日
DATE_FORMAT(‘2022-03-11’, ‘%W %M %Y’) Friday March 2022
DATE_FORMAT(‘2021-03-19 10:38:59’, ‘%H:%i:%s’) 10:38:59

实际应用中 DATE_FORMAT 函数的第一个参数一般是 datetime / date 类型的。格式符号记住几种常用的组合即可,项目上更多需要时可以查阅以上表格。

最后修改时间:2023-09-14 16:18:21
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论