SQL-时间处理汇总

目录

1、常用日期的表示方法

2、时间格式的转换

2.1、时间戳和日期格式切换

日期转时间戳:unix_timestamp(日期值,'日期格式')

时间戳转日期from_unixtime(时间戳,'要转换的日期格式')

2.2、日期格式切换

2.3、时间格式截取日期、小时等

将yyyy-MM-dd HH:MM:SS截取为yyyy-MM-dd

截取时间戳中的天数和小时数

3、日期维度切换

4、日期计算

4.1、计算日期差、月份差、时间差

4.2、日期加减


1、常用日期的表示方法

基本的日期表示方法遵循如下格式

'${#锚定日期:日期格式#}'

例如:今天是20230523,我想以昨天的日期20220522为基准即date(0,0,-1),得到本月的1号数据,那么日期格式就是yyyyMM01;

如果以上月的T-1日为基准,即date(0,-1,-1)...以此类推,下表总结了日常取数时会用到的各种日期写法。

日期语句
昨日(20230522)'{#date(0,0,-1):yyyyMMdd#}' `T-1`

'{dateSuffix}'T-1
前7日(20230516)
T-7
'{#date(0,0,-7):yyyyMMdd#}'`T-7`

'{sevenDaysBeforeSuffix}'
本月1号(20230501)
(取数日期为T-1日,后面同理)
'${#date(0,0,-1):yyyyMM01#}'
上月1号(20230401)'${#date(0,-1,-1):yyyyMM01#}'
T-1日上月同期(20230422)'${#date(0,-1,-1):yyyyMMdd#}'
去年当月1号(20220501)'${#date(-1,0,-1):yyyyMM01#}'
T-1日去年同期(20220522)'${#date(-1,0,-1):yyyyMMdd#}'
T-1日去年同期(如:2022-05-22)'${#date(-1,0,-1):yyyy-MM-dd#}'

 这里可以发现,月初直接就写成yyyyMM01即可,但是月末因为有28、29、30、31各种情况,所以不能直接写,要用到last_day()函数计算月末,但是这里要注意:last_day()函数只能识别yyyy-mm-dd格式的日期,在使用时要注意转化

日期(以 T-1为基准日期)语法
本月底yyyyMMdd格式(20230531)replace(last_day('${#date(0,0,-1):yyyy-MM-dd#}'),'-','')
本月底yyyy-MM-dd格式(20230531)last_day('${#date(0,0,-1):yyyy-MM-dd#}')
上月底yyyyMMdd格式(20230430)replace(last_day('${#date(0,-1,-1):yyyy-MM-dd#}'),'-','')

2、时间格式的转换

我们常见的时间格式有如下几种

  • 时间戳10位(精度到秒)或13位(精度到毫秒)
  • 日期yyyyMMdd或yyyy-MM-dd
  • 时间yyyy-MM-dd HH:MM:SS

2.1、时间戳和日期格式切换

日期转时间戳:unix_timestamp(日期值,'日期格式')

unix_timestamp('20171205','yyyymmdd')

unix_timestamp('2017-12-05','yyyy-mm-dd')

时间戳转日期from_unixtime(时间戳,'要转换的日期格式')

这里注意时间戳的位数,如果是13位,需要除以1000再进行转换

from_unixtime(cast(1657700687791/1000 as bigint),'yyyy-MM-dd HH:MM:SS')

from_unixtime(cast(1657700687791/1000 as bigint),'yyyy-MM-dd')

...

2.2、日期格式切换

yyyyMMdd和yyyy-MM-dd进行相互转换时,可以有两种方式:

方法一:先用unix_timestamp()转为时间戳,再使用from_unixtime()转换成需要的格式

方法二:先用substr()将时间截取出年月日的字符,再使用concat进行组合

方法1: from_unixtime+ unix_timestamp
--20171205转成2017-12-05 
select from_unixtime(unix_timestamp('20171205','yyyymmdd'),'yyyy-mm-dd') from dual;

--2017-12-05转成20171205
select from_unixtime(unix_timestamp('2017-12-05','yyyy-mm-dd'),'yyyymmdd') from dual;

方法2: substr + concat
--20171205转成2017-12-05 
select concat(substr('20171205',1,4),'-',substr('20171205',5,2),'-',substr('20171205',7,2)) from dual;

--2017-12-05转成20171205
select concat(substr('2017-12-05',1,4),substr('2017-12-05',6,2),substr('2017-12-05',9,2)) from dual;

2.3、时间格式截取日期、小时等

将yyyy-MM-dd HH:MM:SS截取为yyyy-MM-dd

to_date(sell_order_create_time)

截取时间戳中的天数和小时数

通过调整from_unixtime的格式即可

from_unixtime(cast(1657700687791/1000 as BIGINT),'yyyy-MM-dd HH:MM:SS') ,
from_unixtime(cast(ts/1000 as BIGINT),'yyyy-MM-dd HH')  as day_hour,
from_unixtime(cast(ts/1000 as BIGINT),'yyyy-MM-dd')  as day,
from_unixtime(cast(ts/1000 as BIGINT),'HH') as hour,
#截取小时数还有一个简便写法
hour(from_unixtime(cast(ts/1000 as BIGINT)))

结果如下 

tshour(from_unixtime(cast(ts/1000 as BIGINT))),day_hourdayhour
1657700687791162022-07-13 162022-07-1316

3、日期维度切换

语法结果
year('2023-05-23 12:23:14')2023
month('2023-05-23 12:23:14')5
day('2023-05-23 12:23:14')23
hour('2023-05-23 12:23:14')12
minute('2023-05-23 12:23:14')23
second('2023-05-23 12:23:14')14
weekofyear('2023-01-01 12:23:14')这里注意:跨年的那一周是按上年的周数统计,只有第一个当年的完整周才是第一周,所以2023年1月1日的周数是第52周

4、日期计算

4.1、计算日期差、月份差、时间差

使用datediff(后日期,前日期)计算日期差,yyyy-mm-dd格式可以直接计算,yyyymmdd需要处理之后计算

--yyyy-mm-dd格式计算日期差
datediff('2022-01-02', '2022-01-01')
--yyyymmdd格式计算日期差
datediff(to_date(from_unixtime(UNIX_TIMESTAMP('20220102','yyyyMMdd'))),to_date(from_unixtime(UNIX_TIMESTAMP('20220101','yyyyMMdd'))))

使用month_BETWEEN()计算月份,得到的是一个小数值,可以使用ceiling()和floor()函数向上或向下取整,一般实际场景下,使用floor比较多,

select
'2022-01-01',
'2022-02-28',
months_between('2022-02-28','2022-01-01'),---1,87096774
floor(months_between('2022-02-28','2022-01-01')),--1
ceiling(months_between('2022-02-28','2022-01-01')),--2
floor(months_between( to_date(from_unixtime(UNIX_TIMESTAMP('20220228','yyyyMMdd'))), to_date(from_unixtime(UNIX_TIMESTAMP('20220101','yyyy-MM-dd'))) )) as mon_gap

使用时间戳相减可以得到两个时间相差的秒数,再除60得到分钟数,除3600得到小时数

(unix_timestamp(time1)-unix_timestamp(time2)) as second
(unix_timestamp(time1)-unix_timestamp(time2))/60 as minute
(unix_timestamp(time1)-unix_timestamp(time2))/3600 as hour

4.2、日期加减

使用date_add()和date_sub()计算日期加减法

  • date_add('2023-01-01',5) 得到2023-01-06
  • date_sub('2023-01-03',2) 得到2023-01-01

通过日期加减可以计算我们想要的各种时间,这里简单举两个常用的例子:

取日期字段days所在周的周一和周日

date_add(days,2-if(dayofweek('yyyy-mm-dd')=1,8,dayofweek(days))) as `周一`,
date_add(days,8-if(dayofweek('yyyy-mm-dd')=1,8,dayofweek(days))) as `周日`

以2023-05-23(周二)为例,dayofweek('days')=3,这里周日是1,周六是7

2-3=-1,在2023-05-23的基础上加上-1,得到2023-05-22周一

8-3=5,在2023-05-23的基础上加上5,得到2023-05-28周日

取上个月的月份

以2022-01-01为例,2022-01-01截取日期值01,用2022-01-01减去01,得到2021-12-31,再截取前1-7位,得到2021-12

substr(date_sub('2022-01-01',cast(substr('2022-01-01',9,2))),1,7)--得到结果2021-12

如果想得到202112,用replace()函数,把-替换即可

replace(待替换字段,'-','')

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SQL脚本文件汇总工具是一种用于将多个SQL脚本文件合并为一个文件的辅助工具。在软件开发和数据库管理中,通常会有大量的SQL脚本文件用于创建表、插入数据、更新或删除数据等操作。当需要将这些脚本文件整合在一起执行时,手动逐个文件复制粘贴是很麻烦且容易出错的。 SQL脚本文件汇总工具可以简化这个过程,它会将指定目录下的所有SQL脚本文件自动读取并按照指定的顺序合并到一个新的文件中。这样,用户只需要指定目录和脚本执行顺序即可,而无需手动复制粘贴每个脚本文件的内容。这个工具通常可以提供可视化的界面,让用户更方便地指定目录和脚本执行顺序。 使用SQL脚本文件汇总工具的好处是节省时间和减少出错的可能性。当需要执行多个脚本文件时,只需要点击一次按钮或运行一个命令,就可以自动将所有脚本合并为一个,然后再一次性执行。这样可以大大减少手动操作的时间和错误可能性,提高工作效率。 此外,SQL脚本文件汇总工具还可以提供其他功能,比如对脚本文件进行预处理、自动去除注释或空行等操作,使合并后的文件更整洁。有些工具还可以生成执行报告,记录脚本执行的结果和错误信息,便于用户查看和分析。 总之,SQL脚本文件汇总工具是一种能够自动将多个SQL脚本文件合并为一个文件的辅助工具,可以节省时间、减少出错,并提供其他相关功能,提高工作效率。 ### 回答2: SQL脚本文件汇总工具是一种用于整合和汇总多个SQL脚本文件的工具。在软件开发和数据库管理中,经常会出现需要执行多个SQL脚本文件的情况,这些脚本文件可能分散在不同的目录或者由不同的人员编写。而使用SQL脚本文件汇总工具,可以将这些脚本文件自动合并为一个文件,方便执行和管理。 这种工具通常具有以下功能: 1. 文件选择和导入:可以从指定目录或者通过文件选择框导入需要汇总SQL脚本文件。 2. 文件合并:将导入的多个SQL脚本文件合并为一个文件,保持原有的文件编码和格式。 3. 文件排序:按照指定的顺序将脚本文件进行排序,保证执行的顺序正确。 4. 语法检查:对合并后的SQL脚本进行语法检查,及时发现错误。 5. 去重和冲突处理:去除重复的SQL语句,处理可能存在的命名冲突等问题。 6. 输出和导出:将合并后的SQL脚本文件输出到指定的目录或者导出为一个新的文件。 使用SQL脚本文件汇总工具的好处是节省时间和精力。开发人员可以将分散在不同目录和文件中的SQL脚本按需整合为一个文件,减少手动操作的复杂性。同时,合并后的脚本文件可以通过工具的语法检查功能,发现并修复潜在问题,提高代码的质量和可靠性。总的来说,SQL脚本文件汇总工具能够提高团队协作效率,降低开发和维护成本。 ### 回答3: SQL脚本文件汇总工具是一种用于收集和整合多个SQL脚本文件的工具。它可以自动扫描指定文件夹中的所有SQL脚本文件,并将它们合并为一个文件或者生成一个包含所有脚本的汇总报告。 使用SQL脚本文件汇总工具可以方便地管理和维护多个SQL脚本文件。它可以节省开发人员的时间和精力,提高工作效率。 SQL脚本文件汇总工具的主要功能包括: 1. 文件扫描:能够自动扫描指定文件夹中的SQL脚本文件,并将它们识别并整合至一个文件中。 2. 脚本合并:可以将多个SQL脚本文件合并为一个文件。这样做可以方便地执行这些脚本文件,减少手动操作的繁琐。 3. 汇总报告:可以生成一个包含所有脚本文件的汇总报告。这个报告可以包括脚本文件的名称、路径、大小、编码等信息,方便开发人员进行查阅和管理。 4. 自定义配置:可以根据用户的需求进行配置,如选择需要合并的文件类型、指定输出文件的路径和格式等。 总之,SQL脚本文件汇总工具是一个能够帮助开发人员自动化管理和整合SQL脚本文件的工具。它可以提高工作效率,减少人为错误的发生,并提供便捷的报告功能,以便更好地进行管理和维护。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值