今天是《SQL知识百科》第五讲,主要内容与时间函数相关,包括常用的时间函数、时间提取函数、时间计算函数以及时间与时间戳的转换。
常用的时间函数
to_date()函数
函数的作用是:将字符串的日期转换成时间格式的日期,转换后的时间格式如下:
格式
意义
年MM数月月月月缩写DD数日周缩写DY周缩写AM代表上午或下午HH24、HH12 12小时制或24小时制MI分钟SS秒。
例子如下:
从DUAL选择截止日期(' 2006-05-01 19:25336034 ',' YYYY-MM-DD hh243360 mi :s ')
从DUAL选择截止日期(' 2006-05-01 19:25 ',' YYYY-MM-DD HH24:MI ')
从DUAL选择截止日期(' 2006-05-01 19 ',' YYYY-MM-DD HH24 ')
从DUAL选择截止日期(' 2006-05-01 ','年-月-日')
从DUAL选择截止日期(' 2006-05 ','年-月')
从DUAL选择截止日期(' 2006 ',' YYYY ')
current_date()/current_time()
返回当前时间,即年月日,current_time()等于current_date。
selectcordate()#返回值:
# '2020-10-09'
current_timestamp()
Current_timestamp()相当于now()并返回当前时间戳。
时间提取
时间提取功能包括年()、月()、日()、时()、分()、秒()等。它们的用法总是一样的。这些函数返回年、月、日期、时间等。截止日期,范围为1000-9999。当日期为0时,它返回0。
例子如下:
选择年份(“98-02-03”)
#返回值1998。
选择月份(“98-02-03”)
#返回值02。
选择日期(“98-02-03”)
#返回值3。
时间计算函数
DATEDIFF()
语法:DATEDIFF(expr1,expr2)
DATEDIFF()将返回expr 1expr 2的值,该值用于指示两个日期之间的天数。Expr1和expr2都是日期或日期时间表达式。操作中仅使用这些值的日期部分。
SELECT DATEDIFF(' 1997-12-31 23:59:59 ',' 1997-12-30 ')
#返回结果。
一个
date_sub()/date_add()
语法格式:
DATE_ADD(日期、间隔表示单位)
日期_子(日期,间隔表示单位)
执行日期计算的两个函数。DATE是用于指定开始日期的日期时间或日期值。Expr是字符串形式的表达式,用于指定从开始日期开始增加或减少的间隔值。如果是负的间隔值,expr值的第一个字符是-。Unit是一个unit关键字,用来指定expr表达式应该采用的单位。
INTERVAL关键字和单位说明符都不区分大小写。
下表列出了每个单位值的expr参数的预期格式。
应为expr格式微秒毫秒秒分钟小时星期月份季度年秒微秒'秒。毫秒' MINUTE _微秒'分钟' MINUTE_SECOND '分钟:秒' HOUs。r _微秒'小时。毫秒' HOUR_SECOND '小时:分钟:秒' HOUR_MINUTE '小时:分钟' DAY _微秒'天。毫秒' DAY_SECOND '日小时:分钟:秒' DAY_MINUTE '日小时:
时间戳
时间戳的定义
Timestamp是自1970年1月1日(UTC/GMT中的午夜)以来经过的秒数,不考虑闰秒。
根据ISO 8601规范,UNIX时间戳的0是1970-01-01t 00336000336000000 z。
一小时用UNIX时间戳格式表示:3600秒;一天用UNIX表示。时间戳是86400秒,闰秒不算。
在大多数UNIX系统中,UNIX时间戳存储为32位,这可能会导致2038年问题或2038年问题。
UNIX_TIMESTAMP(date)
如果不调用任何参数,则以无符号整数的形式返回UNIX时间戳(1970-01-01 00:000:00 ' GMT后的秒),并获得当前时间戳。
如果用date调用UNIX_TIMESTAMP(),将在' 1970-01-01 00:00:00' GMT后以秒的形式返回参数值。DATE可以是日期字符串、DATETIME字符串、时间戳或本地时间的yymmdd或YYMMDD格式的数字。
例如:
SELECTUNIX _时间戳();(执行时间为:2009-08-0610336010336040)。
# 1249524739
SELECTUNIX _时间戳(' 2009-08-06 ');
# 1249488000
rom_unixtime()
from_unixtime(t1,' yyyy-MM-DD hh :MM :s ')
其中t1是10位时间戳值,即从1970-1-1到现在的秒,不允许所谓的13位毫秒。
需要截取13位时间戳,然后将其转换为bigint类型,因为from_unixtime类的第一个参数只接受bigint类型。例如:
选择from _ unixtime(cast(substring(tistmp,1,10)作为bigint),' yyyy-MM-dd HH') tim,count(*)cn from tengine _ hour _ data
哪里…
select from _ unixtime(cast(TsasBiint))
从临时表
下一篇:没有了