logo
GBase 8s
适配迁移
文章

GBase 8s 日期时间数据类型

hxuan7
发表于2023-04-21 10:07:05725次浏览0个评论

问题描述: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

示例语句

结果

评论已关闭