GBase 8s 日期时间数据类型
问题描述:GBase 8s 日期时间数据类型
解决方案:
1、常见的日期时间数据类型
1.1、date
最常用的日期类型,它可以保存日期。可以表示公元0001-01-01至9999-12-31之间的日期值,可接受输入值为0000-00-00,等效于null值。
date类型在数据库中的存储固定为4字节,与int类型一致。
查询
结果
date数据类型转换为int类型
结果
1.2、datetime FIRST to LAST
datetime与date的区别是不仅可以保存日期,还能保存时间和小数秒,小数位数可以指定为1-5,所以最高精度可以到十万分之一秒。
datetime类型在数据库中的存储依据FIRST和LAST来确认。最少2字节,最大使用11字节存储。
其中:FIRST和LAST可使用year,month,day,hour,minute,second,fraction(N) (1<=N<=5),FIRST要大于等于LAST。
常见的类型及存储字节长度
示例,创建表
查询数据
结果
1.3、timestamp
timestamp是datetime year to second/fraction(N)的别名。
timestamp表示datetime year to second;
timestamp(N) (1<=N<=6)表示datetime year to fraction(N) (1<=N<=5),特别说明:timestamp(6)实际将转换成datetime year to fraction(5)。
示例,创建表
查询数据
结果
1.4、date和datetime数据类型内部存储验证
使用oncheck -pp 打印数据存储页
获取tab_dt表的partnum
结果
通过oncheck -pp TBLSpace PAGENUM dump页
结果
2、常见问题
2.1、如何取当前时间
sysdate – 返回当前系统日期和时间,精确到十万分之一秒
current – 返回当前系统日期和时间,精确到千分之一秒
current FIST to LAST – 返回当前系统日期和时间,返回FIST to LAST的精度
today – 返回当前系统日期,精确到天
示例,创建表
结果
2.2、如何进行日期运算
日期型数据可以与数值加减得到新的日期,加减数值单位为天
sysdate + 1 – 取明天的当前时间
sysdate - 1/24 – 取当前时间的前一个小时
sysdate + 1 units day – 取明天的当前时间
sysdate - 1 units hour – 取当前时间的前一个小时
sysdate + interval(1 02:05) day to minute – 取当前时间1天2小时5分后的时间
示例,创建表
结果
2.3、如何求两个日期的间隔时间
可以直接把两个日期相减,返回的数据类型为interval
示例语句
结果
特别注意,使用date()函数,date(‘2022-04-01’)表示将字符串’2022-04-01’转换为日期,但date(2022-04-01)将转换成date(2022)。
如果需要两个日期相减的值为数值,需要自定义函数(转换)。可参考:https://gbasedbt.com/index.php/archives/339/
2.4、如何将日期转字符
to_char(sysdate,‘YYYY-MM-DD HH24:MI:SS.FF3’)
gbase_to_char(sysdate,‘%Y-%m-%d %H:%M:%S.%F3’)
示例语句
结果
2.5、如何将字符转日期
to_date(‘2022-04-13 15:01:54.123’,‘YYYY-MM-DD HH24:MI:SS.FF3’)
gbase_to_date(‘2022-04-13 15:01:54.123’,‘%Y-%m-%d %H:%M:%S.%F3’)
示例语句
结果
3、常用日期函数
3.1、TO_CHAR(DATE,FMT) 或者GBASE_TO_CHAR(DATE,FMT) --格式化日期成字符
格式备注:
HH表示12小时进制,HH24表示采用24小时进制,MM表示月份,MI表示分钟;
示例语句
3.2、TO_DATE(CHAR,FORMATSTR) --将字符转换成日期
to_date(‘2022-04-13 15:01:54’,‘YYYY-MM-DD HH24:MI:SS’)
gbase_to_date(‘2022-04-13 15:01:54’,‘%Y-%m-%d %H:%M:%S’)
格式备注:
HH表示12小时进制,HH24表示采用24小时进制,MM表示月份,MI表示分钟;
示例语句
3.3、TRUNC(DATE,FMTS) – 返回截断后的日期值
FMTS对于datetime类型,可接受year,month,dd,day,hh,mi
FMTS对于date类型,可接受year,month,dd,day
dd表示截取当天的00:00,day表示截取本周所在周日的00:00
date示例语句
结果
3.4、返回DATE的某一部份内容
YEAR(DATE) – 返回年份
MONTH(DATE) – 返回月份
DAY(DATE) – 返回天数
WEEKDAY(DATE) – 返回周几,0表示周日
QUARTER(DATE) – 返回季数
示例语句
结果
3.5、ADD_MONTHS(DATE,MONTHS) --在DATE增加月份得到新日期
ADD_MONTHS(sysdate,3) --当前日期加3个月
ADD_MONTHS是一个比较有意思的函数,它会自动处理大小月及闰月,如下所示
示例语句
结果
3.6、LAST_DAY(DATE) --返回日期所在月份的最后一天日期
对于date类型,将返回本月最后一天的日期值;
对于datetime 类型,将返回本周最后一天的当前时间值;
示例语句
结果
3.7、NEXT_DAY(DATE,CHAR) --从给定日期开始返回下个CHAR指定星期的日期
CHAR可以使用全称或者三字线简写,如:Monday/Mon,Sunday/Sun
对于date类型,将返回下一个指定周几的日期值;
对于datetime 类型,将返回下一个指定周几的当前时间值;
示例语句
结果
3.8、TO_YMINTERVAL(CHAR)和TO_DSINTERVAL(CHAR)
TO_YMINTERVAL(CHAR) --返回[年-月]格式构成的时间间隔,一般用于日期加减运算
TO_DSINTERVAL(CHAR) --返回[天 时:分:秒]格式构成的时间间隔,一般用于日期加减运算
示例语句
结果
3.9、NUMTOYMINTERVAL(N,CHAR)和NUMTODSINTERVAL(N,CHAR)
NUMTOYMINTERVAL(N,CHAR) --返回CHAR中指定单位的时间间隔数值,一般用于日期加减运算
CHAR可以为YEAR,MONTH
NUMTODSINTERVAL(N,CHAR) --返回CHAR中指定单位的时间间隔数值,一般用于日期加减运算
CHAR可以为DAY,HOUR,MINUTE,SECOND
示例语句
结果


热门帖子
- 12023-05-09浏览数:16784
- 22019-04-26浏览数:10224
- 32020-05-11浏览数:10124
- 42023-09-25浏览数:9500
- 52023-07-04浏览数:9431