SPL 的日期时间函数
在数据分析计算中,日期时间类数据是比较特殊的类型,这里我们就来研究一下如何在SPL中使用日期时间类数据。
1日期时间数据的转换和生成
日期时间类数据,通常会用字符串来输入或显示。在使用集算器时,可以点击Tool>Option,在选项配置的Environment页面中,设定日期时间类型数据所使用的默认格式,如:
使用SPL时,日期时间类型的数据会按照默认的格式显示出来,如:
A | |
1 | =now() |
运行后查看A1中的结果如下:
这里用到的函数now() 是日期时间计算中比较常用的函数,可以获得系统中当前的日期时间。日期时间的显示在不同的语言环境中是不同的,特别是月份和星期等数据,下面都将以英文版的格式为例加以说明。
当需要输入日期时间类型的常数时,也可以直接按照格式输入字符串,此时SPL会自动将数据解析为日期时间数据,如:
A | B | C | |
1 | 2019-2-1 | 12:45:30 | 2019-02-01 10:30:00 |
A1,B1和C1会分别被解析为日期类型、日期时间类型和时间类型数据,如下:
SPL可以把直接输入的常数解析为日期时间类型,但对于已经是字符串类型的,就需要用date(),time() 或者datetime() 将字符串转换为日期、时间或者日期时间数据,如:
A | B | C | |
1 | 2019 | 2 | 20 |
2 | =A1/"-"/B1/"-"/C1 | =12/":"/22/":00" | =A2+" "+B2 |
3 | =ifdate(A2) | =iftime(B2) | =ifdate(C2) |
4 | =date(A2) | =time(B2) | =datetime(C2) |
5 | =ifdate(A4) | =iftime(B4) | =ifdate(C4) |
A2,B2和C2中是通过字符串运算得到的字符串:
第3行用ifdate() 和iftime() 函数判断第2行的数据是否已被处理为日期或者时间类型(注意:判断日期类型和日期时间类型的数据,都使用ifdate()),A3,B3和C3中的结果如下:
从结果可以看出,第2行中单元格值都不是日期或时间类数据,实际上都是字符串,显示也都和日期时间不同。
在第4行中,将字符串按照对应的格式分别转换为日期时间数据,结果如下:
在第5行判断第4行的数据是否已被处理为日期或者时间类型,结果如下:
当使用外部数据时,有时需要处理不同格式的日期时间数据,这时可以在使用date(),time() 或者datetime() 时,在字符串后添加使用的显示格式串,如:
A | B | C | |
1 | Feb 2, 2019 | '2:30:45 PM | '2019-6-20 2:30:45 PM |
2 | MMM d,yyyy | hⓂs a | yyyy-M-d hⓂs a |
3 | =date(A1,A2) | =time(B1,B2) | =datetime(C1,C2) |
在第1行中的数据都并没有用默认的日期时间格式,而且B1和C1都在前面添加了 ' 字符表示使用字符串常数,A1,B1和C1中的数据如下:
需要注意的是,月份格式MMM的设定是和语言环境相关的,英文环境中表示月份的英文缩写,如Feb;而中文环境中则会显示为中文月份。
第2行中列出的格式串指示SPL如何解析第1行中的数据,第3行使用这些格式串进行转换,结果如下:
完成类型转换后,查看结果时仍然会用默认的格式显示。如果要用其他格式显示,可以用string(d,fmt)函数,将日期时间类数据转换为指定格式的字符串,如:
A | B | C | |
1 | 2019-02-21 | 12:45:30 | 2019-12-01 10:30:00 |
2 | MMMM d,yyyy | hⓂs a | MMM d,yyyy hⓂs a |
3 | =string(A1,A2) | =string(B1,B2) | =string(C1,C2) |
A3,B3和C3中,将日期时间类数据转换为指定格式的字符串:
当然,也可以根据需要直接修改默认的日期时间显示格式。
在用date(),time() 或者datetime() 生成数据类型时,还可以直接依次指定年,月,日,时,分,秒等各个分量:
A | B | C | |
1 | =date(2019,2,21) | =time(13,5,0) | =datetime(2019,12,29,13,5,0) |
结果如下:
在指定各个分量时,要注意每个整数的合理范围,例如小时分量在0~23之间。
2日期时间数据的显示格式
A | B | C | |
1 | =date(201906,29) | =time(13:5:18) | =datetime(A1,B1) |
这个例子中,A1中用date()生成日期,第一个参数使用了6位数,SPL将用其同时表示年和月。而C1则将A1中的日期和B1中的时间合并得到日期时间数据,结果如下:
上一节已经使用到了日期时间数据的一些显示格式,用格式字符串来指定显示样式,例如yyyy表示4位数的年份、dd表示2位数的日期等。下面将具体说明格式串中各个字符的作用,并以C1中的数据为例显示相应的格式化结果:
字符 | 作用 | SPL | 结果 |
---|---|---|---|
y/yy | 年,两位数字 | =string(C1,"yy") |
![]() |
yyyy | 年,四位数字 | =string(C1,"yyyy") |
![]() |
M | 月 | =string(C1,"M") |
![]() |
MM | 月,两位数字,不足用0补齐 | =string(C1,"MM") |
![]() |
MMM | 月,英文简写 | =string(C1,"MMM") |
![]() |
MMMM | 月,英文全拼 | =string(C1,"MMMM") |
![]() |
d | 日 | =string(C1,"d") |
![]() |
dd | 日,两位数字,不足用0补齐 | =string(C1,"dd") |
![]() |
E | 星期,英文简写 | =string(C1,"E") |
![]() |
EEEE | 星期,英文全拼 | =string(C1,"EEEE") |
![]() |
G | Era标识符,公元前/公元后,缩写 | =string(C1,"G") |
![]() |
w | 本年的第几周 | =string(C1,"w") |
![]() |
ww | 本年的第几周,两位数字,不足用0补齐 | =string(C1,"ww") |
![]() |
W | 本月的第几周 | =string(C1,"W") |
![]() |
F | 在本月的第几周,仅根据日计算 | =string(C1,"F") |
![]() |
D | 本年的第几天 | =string(C1,"D") |
![]() |
H | 小时,24小时制,0~23 | =string(C1,"H") |
![]() |
HH | 小时,24小时制,0~23,两位数字,不足用0补齐 | =string(C1,"HH") |
![]() |
k | 小时,24小时制,1~24 | =string(C1,"k") |
![]() |
kk | 小时,24小时制,1~24,两位数字,不足用0补齐 | =string(C1,"kk") |
![]() |
h | 小时,12小时制,1~12 | =string(C1,"h") |
![]() |
hh | 小时,12小时制,1~12,两位数字,不足用0补齐 | =string(C1,"hh") |
![]() |
K | 小时,12小时制,0~11 | =string(C1,"K") |
![]() |
KK | 小时,12小时制,0~11,两位数字,不足用0补齐 | =string(C1,"KK") |
![]() |
m | 分钟 | =string(C1,"m") |
![]() |
mm | 分钟,两位数字,不足用0补齐 | =string(C1,"mm") |
![]() |
s | 秒 | =string(C1,"s") |
![]() |
ss | 秒,两位数字,不足用0补齐 | =string(C1,"ss") |
![]() |
S | 毫秒 | =string(C1,"S") |
![]() |
a | 上午/下午 | =string(C1,"a") |
![]() |
z | 时区,缩写 | =string(C1,"z") |
![]() |
zzzz | 时区,全拼 | =string(C1,"zzzz") |
![]() |
Z | 时区代码 | =string(C1,"Z") |
![]() |
3从日期时间数据中获取信息
在日期时间等类型的数据中,具体的年,月,日,时,分,秒等常常是处理时需要单独使用的信息,我们可以通过year(),month(),day(),hour(),minute(),second(),millisecond()等函数获得这些日期时间数据中的各个分量:
A | B | C | |
1 | 2019-6-30 | 12:45:30.230 | =now() |
2 | =year(A1) | =month(A1) | =day(A1) |
3 | =hour(B1) | =minute(B1) | =second(B1) |
4 | =month(C1) | =hour(C1) | =millisecond(C1) |
A1,B1和C1中的日期时间数据如下:
A2,B2和C2从日期数据中分别获取年、月、日:
A3,B3和C3从时间数据中获取时、分、秒:
A4,B4和C4从now() 函数的日期时间类型结果中获取月,小时和毫秒分量:
从结果中可以看到,now() 函数返回的结果会精确到毫秒,但显示时只会显示到秒。在使用now() 函数时,可以通过添加选项的方法来改变结果的精度。如:
A | B | C | |
1 | =now@d() | =now@t() | |
2 | =now@m() | =now@s() | =millisecond(B2) |
A1中添加@d选项,只取日期部分数据,B1中添加@t选项,只取时间部分数据,结果如下:
A2中添加@m选项,数据将精确到分,B2中添加@s选项,获得的数据将精确到秒,结果如下:
在C2中可以看到,B2中的数据毫秒分量为0:
@m和@s选项,也可以用在datetime() 和time() 函数中,设定转换日期时间数据及时间数据时的精度为分或秒。
在日期类型数据中,也可以获取到时间分量,从时间类型数据中也可以获取日期分量,如:
A | B | C | |
1 | 2019-6-30 | 19:05:10.866 | |
2 | =hour(A1) | =minute(A1) | =second(A1) |
3 | =month@y(B1) | =day(B1) |
A2,B2和C2中结果如下:
也就是说,单独的日期数据,其中的时间指定为00:00:00。
A3中的month函数添加了@y选项,获得年月组成的6位数,A3和B3中结果如下:
也就是说,单独的时间数据,其中的日期为1970年1月1日。
除了直接从日期时间类型的数据中获取各个分量,还有一些函数可以用来获得日期相关的数据。
使用day@w(),在获取日期分量时添加@w选项,可以获得本日是一周中的第几天:
A | B | C | |
1 | 2019-4-3 | 2019-6-18 | 2020-2-20 |
2 | =day@w(A1) | =day@w(B1) | =day@w(C1) |
3 | =string(A1,"EEEE") | =string(B1,"EEEE") | =string(C1,"EEEE") |
A2,B2和C2获取各个日期分别是一周中的第几天,结果如下:
SPL中,每周的第1天是从周日开始计算的,在第3行中用显示字符串的方式取得了每一天是星期几:
另外,我们还可以使用pdate() 函数,配合不同的选项获得日期
A | B | C | |
1 | 2019-8-17 | ||
2 | =pdate@w(A1) | =pdate@m(A1) | =pdate@q(A1) |
3 | =pdate@we(A1) | =pdate@me(A1) | =pdate@qe(A1) |
在pdate() 函数中:
○ 直接使用@w选项可以获得本周第1天的日期,从周日开始计算;
○ 添加@m选项可以获得本月第1天的日期;
○ 添加@q选项可以获得本季度第1天的日期;
○ 添加@e则可以获得某个时间段最后一天的数据,如本周最后一天,本季度最后一天等。A2,B2,C2,A3,B3和C3中的结果依次如下:
SPL中还可以使用days() 函数计算某日期所在月的总天数,添加@q选项可以得到所在季度的总天数,添加@y选项可以得到整年的总天数,如:
A | B | C | |
1 | 2019-02-21 | ||
2 | =days(A1) | =days@q(A1) | =days@y(A1) |
A2,B2和C2中的结果如下:
4使用日期时间数据的计算
除了直接从日期时间数据中获取信息,在SPL中还可以使用日期时间类数据来执行各类计算。
最常用的有关日期的计算就是计算年龄:
A | B | C | |
1 | 1995-3-30 | =now@d() | |
2 | =age(A1) | =age@m(A1) | =age@y(A1) |
A1和B1中的数据如下:
在第2行用age() 函数,根据A1中的生日来计算年龄,计算年龄时,是以当前的日期为准的,默认情况将精确到日,添加@m可以将精度设为月,添加@y可以将精度设定为年。在不同精度的情况下,计算所得的年龄可能会有区别,A2,B2和C2中得到的年龄分别如下:
使用age() 函数,类似于计算生日日期和当前日期间隔的年数。更普遍的计算时间间隔的函数是interval() 函数,用这个函数可以计算两个日期时间数据之间相差多少天,添加@y,@q,@m,@s,@ms等选项,可以计算间隔多少年,季度,月,秒或毫秒。例如:
A | B | C | |
1 | 1995-4-30 | 2019-4-10 | |
2 | =interval(A1,B1) | =interval@y(A1,B1) | =B1-A1 |
如果只需要计算两个日期之间相差多少天,也可以直接用减法完成,A2,B2和C2中的结果如下:
特别的,每个日期时间数据都可以转换为一个对应的长整数,这个长整数其实就是指定的日期时间和1970年1月1日,格林威治时间0:00:00的间隔毫秒数,如:
A | B | |
1 |
=datetime("1/1/1970 0:00:00 GMT","m/d/yyyy H
©著作权归作者所有:来自51CTO博客作者raqsoft的原创作品,如需转载,请注明出处,否则将追究法律责任
SPL 日期时间 集算器
0 分享
微博 QQ 微信 收藏
上一篇:银行业大数据量清单报表案例 下一篇:SPL 的序号思维及定位计算
![]()
raqsoft
174篇文章,7W+人气,0粉丝致力于大数据开发,与一切不可能sayno![]() Ctrl+Enter 发布 发布 取消 推荐专栏更多![]()
带你玩转高可用
前百度高级工程师的架构高可用实战共15章 | 曹林华¥51.00 487人订阅
订 阅
猜你喜欢
木槿生活数据平台案例 SPL 教案——分组 海量数据搜索---demo展示百度、谷歌搜索引擎的实现 fabric v1.4 kafka模式(未开启TLS),多节点服务器部署,实现动态添加组织 5G丨5G承载光模块 关系型数据库全表扫描分片详解 基于可视化配置的日志结构化转换实现 python股票市场数据探索指北 大数据虚拟混算平台Moonbox配置指南 如何设计实时数据平台(设计篇) docker k8s 集群部署tomcat,使用一个镜像,增加镜像的复用性。 Maxwell读取MySQL binlog日志到Kafka 使用TensorFlow 来实现一个简单的验证码识别过程 ES学习笔记之-ClusterState的学习 Flink SQL解析Json格式数据的方法 kafka生产实例安装 搭建高可用mongo分布式---具体操作 Kafka不停机,如何无感知迁移ZooKeeper集群? 如何精简企业主数据“裹脚布” 图解 kafka 的高可用机制
![]() ![]() 扫一扫,领取大礼包 0
分享
raqsoft ![]() |
SPL 的日期时间函数相关推荐
- MySQL 学习笔记(3)— 字符串函数、数值函数、日期时间函数、流程函数、聚集函数以及分组数据
1. 字符串函数 MySQL 的常用函数包括字符串函数.数值函数.日期时间函数.流程函数等. SELECT ascii("abc"),char(97),concat("h ...
- PHP 中日期时间函数 date() 用法总结
[导读] date()是我们常用的一个日期时间函数,下面我来总结一下关于date()函数的各种形式的用法,有需要学习的朋友可参考.格式化日期date() 函数的第一个参数规定了如何格式化日期 时间.它 ...
- Php中如何记录本报时间,详细讲解PHP的日期时间函数date()
详细讲解PHP的日期时间函数date() 作者:wang 日期:2009-06-06 字体大小: 小 中 大 1,年-月-日 echo date('Y-m-j'); 2007-02-6 echo da ...
- DB2 日期时间函数
db2日期时间函数 (DATE(TRIM(CHAR(DT#11Y))||'-'||TRIM(CHAR(DT#11M))||'-'||TRIM(CHAR(DT#11D))) BETWEEN DATE(' ...
- 转:mysql的日期/时间函数
没事整理下,方便以后查阅 一. Mysql 获得当前日期时间 Now() : 获得当前的 日期+ 时间(date + time )函数: mysql> select now(); +-- ...
- PHP的函数-----生成随机数、日期时间函数
常用的函数 [1] 生成随机数 rand(); 例子: echo rand(); 显示结果: 当刷新时,会有不同的数,默认生成随机数.生成随机数不能控制范围. 如果,想要控制在范围之内,就用: e ...
- oracle和MySQL的日期函数_mysql与oracle的日期/时间函数小结
前言 本文的日期/时间全部格式化为"2016-01-01 01:01:01"形式: MONITOR_TIME为数据库表字段: 字符串与日期/时间相互转换函数 Oracle 日期/时 ...
- [转]ORACLE日期时间函数大全
本文转自:http://www.cnblogs.com/chuncn/archive/2009/04/29/1381282.html ORACLE日期时间函数大全 TO_DATE格式(以时间:2007 ...
- PHP函数之日期时间函数date()使用详解
date()函数是我们在php开发中常碰到并且会使用到的一个日期函数,下面我来给大家介绍date()函数的一些基本扮靓和方法,有需要了解的朋友可进入参考 日期时间函数是PHP 的核心组成部分.无需安装 ...
最新文章
- 微信开放平台手机APP支付
- python使用openCV加载图像、并将BGR格式转换成HSV格式、定义HSV格式中需要分离颜色的掩码(掩模)区间(mask)、并使用mask信息进行颜色分离、BGR格式的图像转化为RGB、并可视化
- SIM PIN Lock
- layui表格获取不到多层数据的解决方案
- ProgressBar 类
- Android 调用分享框
- AttributeError: 'dict' object has no attribute 'iteritems' python3报错
- linuxcentos防ssh爆破
- Java自动化测试框架-10 - TestNG之测试结果篇(详细教程)
- 关于extern的使用
- LaTeX Package cleveref: cleveref must be loaded after hyperref!. 的解决方案
- python open读取_读取文件—open()、read()
- 丁香园 (http://www.dxy.cn)这个名字听着
- latex 图 表格 标题居中
- c 使用mysql的语句_在 MySQL 数据库中使用C 履行SQL的语句
- matlab中contour 函数的用法(绘制等高线)
- 移动硬盘插入笔记本会后,右下角有图标显示,但是我的电脑里面不显示,导致打不开硬盘
- 干货 | 训练AI模型找不到数据?20个精选开源社区收藏好!
- python之小说下载器version3.0
- linux下pdb文件除水,Linux命令删除文本里rmsd20行,输入到一个新的文本,然后提取出相应的pdb id。...