返回首页

gbase数据、南大通用产品文档:GBase8a

更新日期:2024年09月11日

sftp 加载大文件报错
问题现象
使用sftp 加载大文件报错,加载小文件正常。
原因分析
当集群并发加载任务数和单任务加载线程数较大时,会出现sftp 文件加载失败的
情况。
解决方法
确定是参数gcluster_loader_max_data_processors 设置太大造成,将参数调小后无
报错。
说明

GBase 8a MPP Cluster 最佳实践
5 FAQ
文档版本(2022-02-11)
南大通用数据技术股份有限公司
136
建议使用sftp 加载的方式,sshd 的配置文件需要调整maxstartup、maxsession 等参数。

标记 chunk
为可扩展的(SQL 管理 API)
随同 admin() 或 task() 函数,使用 modify chunk extendable 参数来指定未镜像的
dbspace 或临时 dbspace 中的特定 chunk 可扩展。

GBase 8s 管理员参考
南大通用数据技术股份有限公司 - 751 -

语法

元素
描述
关键考虑
chunk_number
chunk 号。


用法
如果 chunk 标记为可扩展的,则二者之一:
当包含该 chunk 的未镜像的 dbspace 或临时 dbspace 运行空闲页太少或用尽时,
服务器
可自动地扩展 chunk。
您可随同 admin() 或 task() 函数,使用 modify chunk extend 参数来扩展 chunk 的大
小。
然而,如果 dbspace 或临时 dbspace 的扩展大小设置为 0,则服务器不可在那个空间中
自动地扩展可扩展的 chunk。在这种情况下,您仍可手动地扩展 chunk。
服务器将自动地标记那些从可扩展的存储池条目分配的 chunk 为可扩展的。因此,您不需
要标记这些 chunk 为可扩展的。要了解关于可扩展的存储池条目的信息,请参阅
storagepool add 参数:添加存储池条目(SQL 管理 API)。
不可扩展镜像的空间中的 chunk。如果您试图使镜像 chunk 为可扩展的,则您会收到错误
提示。
要识别镜像的空间中的主 chunk 和镜像 chunk,请在 onstat
-d 命令输出中 flags 域的
位置 1 中查找 P(主)或 M(镜像)。
示例
下列 onstat -d 输出的片段显示 3 号 chunk 是镜像 chunk:

如此,您不可扩展 3 号 chunk 的大小。然而,您可指定 4 号 chunk 为可扩展的,如下
所示:
EXECUTE FUNCTION sysadmin:task("modify chunk extendable", "4");

返回值

返回数值X 截取到D 位小数后的数字;

D 为可选参数,默认值为0。如果D 为0,结果将不包含小数点和小数部分。

如果D 为负数,表示截去(归零)X 值小数点左边第D 位开始后面所有低位的
值。
示例
示例1
X 为“1.223”,小数点后保留一位。
gbase> SELECT TRUNCATE(1.223,1) FROM t;
+-------------------+
| TRUNCATE(1.223,1) |
+-------------------+
| 1.2 |
+-------------------+
1 row in set
示例2
X 为“1.999”,小数点后保留一位。
gbase> SELECT TRUNCATE(1.999,1) FROM t;
+-------------------+
| TRUNCATE(1.999,1) |
+-------------------+
| 1.9 |
+-------------------+
1 row in set
示例3
D 为“0”,返回值不包含小数点和小数部分。
gbase> SELECT TRUNCATE(1.999,0) FROM t;
+-------------------+
| TRUNCATE(1.999,0) |
+-------------------+
| 1 |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 475
+-------------------+
1 row in set
示例4
X 为“-1.999”,小数点后保留一位。
gbase> SELECT TRUNCATE(-1.999,1) FROM t;
+--------------------+
| TRUNCATE(-1.999,1) |
+--------------------+
| -1.9 |
+--------------------+
1 row in set
示例5
D 为-2,个位十位归零。
gbase> SELECT TRUNCATE(122,-2) FROM t;
+------------------+
| TRUNCATE(122,-2) |
+------------------+
| 100 |
+------------------+
1 row in set
示例6
十进值小数在计算机中通常不以精确数字存储,而是双精度型的值。
gbase> SELECT TRUNCATE(10.28*100,0) FROM t;
+-----------------------+
| TRUNCATE(10.28*100,0) |
+-----------------------+
| 1028 |
+-----------------------+
1 row in set
说明
返回结果为1028,是因为10.28 实际上是以某些像10.2799999999999999 的形式被存储的。

日期和时间函数
概述

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 476

本节描述可以用来操纵时间值的函数。
参考日期和时间类型来获取每种日期和
时间类型在有效格式下可以表达的值的范围;

返回当前日期或者时间的函数都等于在查询开始执行时的值,仅执行一次。这
意味在一个单查询中多次引用像NOW()这样的函数总会得到一样的结果。
这个
原则也适用于CURDATE(),CURTIME(),UTC_DATE(),UTC_TIME(),
UTC_TIMESTAMP()和它们的同义词;

CURRENT_TIMESTAMP() ,CURRENT_TIME() ,CURRENT_DATE() 和
FROM_UNIXTIME()返回当前时区,这和time_zone 系统变量是一样的。还有
UNIX_TIMESTAMP()假设它的参数是当前时区的datetime 值。
示例
示例1
返回当前日期和时间。
gbase> SELECT NOW() FROM t;
+---------------------+
| NOW() |
+---------------------+
| 2014-01-03 14:53:55 |
+---------------------+
1 row in set
示例2
返回当前日期。
gbase> SELECT CURDATE() FROM t;
+------------+
| CURDATE() |
+------------+
| 2013-10-12 |
+------------+
1 row in set
示例3
返回当前时间。
gbase> SELECT CURTIME() FROM t;
+-----------+
| CURTIME() |
+-----------+
| 10:37:04 |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 477
+-----------+
1 row in set
示例4
返回当前UTC 日期。
gbase> SELECT UTC_DATE() FROM t;
+------------+
| UTC_DATE() |
+------------+
| 2013-10-12 |
+------------+
1 row in set
示例5
返回当前UTC 时间。
gbase> SELECT UTC_TIME() FROM t;
+------------+
| UTC_TIME() |
+------------+
| 02:37:32 |
+------------+
1 row in set
示例6
返回当前UTC 时间戳(日期+时间)。
gbase> SELECT UTC_TIMESTAMP() FROM t;
+---------------------+
| UTC_TIMESTAMP() |
+---------------------+
| 2013-10-12 02:37:59 |
+---------------------+
1 row in set
示例7
返回当前时间戳(日期+时间)。
gbase> SELECT CURRENT_TIMESTAMP() FROM t;
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2013-10-12 10:38:14 |
+---------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 478
1 row in set
示例8
返回当前时间。
gbase> SELECT CURRENT_TIME() FROM t;
+----------------+
| CURRENT_TIME() |
+----------------+
| 10:38:26 |
+----------------+
1 row in set
示例9
返回当前日期。
gbase> SELECT CURRENT_DATE() FROM t;
+----------------+
| CURRENT_DATE() |
+----------------+
| 2013-10-12 |
+----------------+
1 row in set
ADDDATE()
函数说明
ADDDATE(date,INTERVAL expr type),ADDDATE(expr,days)

关键词INTERVAL 及type 类型均不区分大小写;

当调用第二个参数INTERVAL 时,ADDDATE()等价于DATE_ADD();

ADDDATE(expr,days)中,
expr 是一个日期或者datetime 表达式,
days 是要加入
expr 中的日期的天数。默认增加天数。
注意
不同引擎支持的参数情况不同, 例如,HIVE 引擎INTERVAL expr
type 参数
只支持INTERVAL
expr
day,其余type 不支持。8a 支持type 具体信息请
参见“5.4.6.5.12 DATE_ADD(),DATE_SUB”。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 479
示例
示例1
ADDDATE(date,INTERVAL expr type),expr 为日期,返回增加31 天后的日期。
gbase> SELECT ADDDATE('2010-01-02', INTERVAL 31 DAY) FROM t;
+----------------------------------------+
| ADDDATE('2010-01-02', INTERVAL 31 DAY) |
+----------------------------------------+
| 2010-02-02 |
+----------------------------------------+
1 row in set
示例2
ADDDATE(expr,days),返回增加31 天后的日期。
gbase> SELECT ADDDATE('2010-01-02', 31 ) FROM t;
+----------------------------+
| ADDDATE('2010-01-02', 31 ) |
+----------------------------+
| 2010-02-02 |
+----------------------------+
1 row in set

ADDTIME(expr,expr2)
函数说明

将expr2 加到expr 中并返回结果;

expr 是时间或datetime 表达式,expr2 是一个时间表达式。
示例
示例1
expr 为datetime。
gbase> SELECT ADDTIME('2010-01-02 23:59:59.999999','1 1:1:1.000002') FROM t;
+--------------------------------------------------------+
| ADDTIME('2010-01-02 23:59:59.999999','1 1:1:1.000002') |
+--------------------------------------------------------+
| 2010-01-04 01:01:01.000001 |
+--------------------------------------------------------+
1 row in set

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 480
示例2
expr 为时间表达式。
gbase> SELECT ADDTIME('01:00:00.999999', '02:00:00.999998') FROM t;
+-----------------------------------------------+
| ADDTIME('01:00:00.999999', '02:00:00.999998') |
+-----------------------------------------------+
| 03:00:01.999997 |
+-----------------------------------------------+
1 row in set
说明
HIVE 引擎不支持该函数。
ADD_MONTHS(date,number)
函数说明

ADD_MONTHS(date, number)函数是在一个日期上加上指定的月份数,其中,
日期中的日是不变的;

如果开始日期是某月的最后一天,结果将会进行调整,返回值会对应新的一月
的最后一天;

如果结果月份的天数比开始月份的天数少,
返回值也会向回调整以适应有效日
期。
说明

date:一个日期数值;

number:加上的月份数,如果是要减去的月份数,则为负数。
注意
hive 引擎不支持该函数。
示例
示例1
在当前日期时间上加上3 个月,日期中的日不变。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 481
gbase> SELECT NOW(),ADD_MONTHS(NOW(),3) AS f_Show FROM t;
+---------------------+---------------------+
| NOW() | f_Show |
+---------------------+---------------------+
| 2013-10-12 10:41:28 | 2014-01-12 10:41:28 |
+---------------------+---------------------+
1 row in set
示例2
增加的月份为负数时,相当于提前月份数。
gbase> SELECT NOW(),ADD_MONTHS(NOW(),-3) AS f_Show FROM t;
+---------------------+---------------------+
| NOW() | f_Show |
+---------------------+---------------------+
| 2013-10-12 10:41:40 | 2013-07-12 10:41:40 |
+---------------------+---------------------+
1 row in set
示例3
通过使用to_date 函数,转换为日期型后,再加上指定的月份。
gbase> SELECT ADD_MONTHS(TO_DATE('2012-9-15','YYYY-MM-DD'),3) AS f_Show FROM t;
+------------+
| f_Show |
+------------+
| 2012-12-15 |
+------------+
1 row in set
示例4
date 为TO_DATE()函数,且TO_DATE()函数的参数为日期时间格式。
gbase> SELECT ADD_MONTHS(TO_DATE('2012-9-15 12:20:31','YYYY-MM-DD HH24:MI:SS'),3) AS
f_Show FROM t;
+---------------------+
| f_Show |
+---------------------+
| 2012-12-15 00:00:00 |
+---------------------+
1 row in set
示例5
8 月31 日是8 月份最后一天,增加3 个月后,是11 月份,11 月共有30 天,因此

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 482
结果就是“2012-11-30”。
gbase> SELECT ADD_MONTHS(TO_DATE('2012-8-31','YYYY-MM-DD'),3) AS f_Show FROM t;
+------------+
| f_Show |
+------------+
| 2012-11-30 |
+------------+
1 row in set
CONVERT_TZ(dt,from_tz,to_tz)
函数说明

CONVERT_TZ()将datetime 值dt 从FROM_tz 给定的时区转化为to_tz,
并返回
结果值。如果参数是不合法的,该函数返回NULL;

如果在从FROM_tz 转化到UTC 时值超出了TIMESTAMP 类型支持的范围,

不会进行转化。关于TIMESTAMP 的取值范围,在“5.4.4.4 日期和时间类型”
中有描述;

要使用诸如“MET”或“Europe/Moscow”命名时区,必须适当的设置时区表。

示例
示例1
from_tz 为'+00:00', to_tz 为'-07:00',进行时区转换。
gbase> SELECT CONVERT_TZ('2010-01-01 12:00:00','+00:00','-07:00') FROM t;
+-----------------------------------------------------+
| CONVERT_TZ('2010-01-01 12:00:00','+00:00','-07:00') |
+-----------------------------------------------------+
| 2010-01-01 05:00:00 |
+-----------------------------------------------------+
1 row in set
CURDATE()
函数说明
以“YYYY-MM-DD”或“YYYYMMDD”格式返回当前的日期值,返回的格式取
决于该函数是用于字符串还是数字上下文中。
示例

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 483
示例1
“YYYY-MM-DD”格式返回当前日期。
gbase> SELECT CURDATE() FROM t;
+------------+
| CURDATE() |
+------------+
| 2013-10-12 |
+------------+
1 row in set
示例2
“YYYY-MM-DD”格式返回计算后的日期值。
gbase> SELECT CURDATE() + 2 FROM t;
+---------------+
| CURDATE() + 0 |
+---------------+
| 2013-10-14 |
+---------------+
1 row in set
CURRENT_DATE,CURRENT_DATE()
函数说明
CURRENT_DATE 和CURRENT_DATE()等价于CURDATE()。
示例
示例1
使用CURRENT_DATE()函数返回日期。
gbase> SELECT CURRENT_DATE() FROM t;
+----------------+
| CURRENT_DATE() |
+----------------+
| 2013-10-12 |
+----------------+
1 row in set
示例2
使用CURRENT_DATE 函数返回日期。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 484
gbase> SELECT CURRENT_DATE FROM t;
+---------------+
| CURRENT_DATE |
+---------------+
| 2013-10-12 |
+---------------+
1 row in set
示例3
使用CURDATE()函数返回日期。
gbase> SELECT CURDATE() FROM t;
+------------+
| CURDATE() |
+------------+
| 2013-10-12 |
+------------+
1 row in set
CURRENT_TIME,CURRENT_TIME()
函数说明
CURRENT_TIME 和CURRENT_TIME()等价于CURTIME()。
示例
示例1
使用CURRENT_TIME()函数返回时间。
gbase> SELECT CURRENT_TIME() FROM t;
+----------------+
| CURRENT_TIME() |
+----------------+
| 10:47:35 |
+----------------+
1 row in set
示例2
使用CURTIME()函数返回时间。
gbase> SELECT CURTIME() FROM t;
+-----------+
| CURTIME() |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 485
+-----------+
| 10:48:01 |
+-----------+
1 row in set
说明
ORACLE 引擎不支持该函数。
CURRENT_TIMESTAMP,CURRENT_TIMESTAMP()
函数说明
CURRENT_TIMESTAMP 和CURRENT_TIMESTAMP()等价于NOW()。
示例

示例1
使用CURRENT_TIMESTAMP 函数返回“日期+时间”。
gbase> SELECT CURRENT_TIMESTAMP FROM t;
+---------------------+
| CURRENT_TIMESTAMP |
+---------------------+
| 2013-10-12 10:48:20 |
+---------------------+
1 row in set
示例2
使用CURRENT_TIMESTAMP()函数返回“日期+时间”。
gbase> SELECT CURRENT_TIMESTAMP() FROM t;
+---------------------+
| CURRENT_TIMESTAMP() |
+---------------------+
| 2013-10-12 10:48:39 |
+---------------------+
1 row in set
示例3
使用NOW()函数返回“日期+时间”。
gbase> SELECT NOW() FROM t;

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 486
+---------------------+
| NOW() |
+---------------------+
| 2013-10-12 10:48:56 |
+---------------------+
1 row in set
CURTIME()
函数说明
以“HH:MI:SS”或“HHMISS”格式返回当前的时间值,返回的格式取决于该函数
是用于字符串还是数字的上下文中。
示例
示例1
以“HH:MI:SS”格式返回当前时间。
gbase> SELECT CURTIME() FROM t;
+-----------+
| CURTIME() |
+-----------+
| 10:46:33 |
+-----------+
1 row in set
示例2
返回“CURTIME()+0”对应的时间值。
gbase> SELECT CURTIME() + 0 FROM t;
+---------------+
| CURTIME() + 0 |
+---------------+
| 104649.000000 |
+---------------+
1 row in set

DATE(expr)
函数说明

从date 或者datetime 表达式expr 中取得日期部分;

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 487

如果expr 是一个非法日期字符串,则返回NULL。
示例
示例1
从datetime 表达式中取得日期部分。
gbase> SELECT DATE('2011-09-05 11:22:03') FROM t;
+-----------------------------+
| DATE('2011-09-05 11:22:03') |
+-----------------------------+
| 2011-09-05 |
+-----------------------------+
1 row in set
示例2
expr 是一个非法日期字符串,则返回NULL。
gbase> SELECT DATE('2011-09-32 11:22:03') FROM t;
+-----------------------------+
| DATE('2011-09-32 11:22:03') |
+-----------------------------+
| NULL |
+-----------------------------+
1 row in set, 2 warnings

gbase> SHOW WARNINGS;
+-------+------+
| Level | Code |
+-------+------+
| Note | 1292 |
| Note | 1292 |
+-------+------+
+----------------------------------------------------------------------+
| Message |
+----------------------------------------------------------------------+
| 192.168.10.115:5050 - Incorrect datetime value: '2011-09-32 11:22:03' |
| 192.168.10.116:5050 - Incorrect datetime value: '2011-09-32 11:22:03' |
+----------------------------------------------------------------------+
2 rows in set

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 488

DATEDIFF(expr,expr2)
函数说明

DATEDIFF()返回开始日期expr 和结束日期expr2 之间的天数;

expr 和expr2 是date 或者datetime 表达式;

只有日期部分用于计算;

如果用于计算日期间隔的参数不是一个date 或者datetime 类型,例如,TIME
型数据,计算结果是不可信的。
示例
示例1
expr 晚于expr2,返回的天数是正数。
gbase> SELECT DATEDIFF('2010-08-30 23:59:59','2010-08-29') FROM t;
+----------------------------------------------+
| DATEDIFF('2010-08-30 23:59:59','2010-08-29') |
+----------------------------------------------+
| 1 |
+----------------------------------------------+
1 row in set
示例2
expr 早于expr2,返回的天数是负数。
gbase> SELECT DATEDIFF('2010-07-31 23:59:59','2010-08-30') FROM t;
+----------------------------------------------+
| DATEDIFF('2010-07-31 23:59:59','2010-08-30') |
+----------------------------------------------+
| -30 |
+----------------------------------------------+
1 row in set

DATE_ADD(),DATE_SUB()
函数说明
以下函数执行日期计算:

DATE_ADD(date,INTERVAL expr type),加法操作;

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 489

DATE_SUB(date,INTERVAL expr type),减法操作。

参数说明

date 是一个DATETIME 或DATE 值,指定一个日期的开始。expr 是一个表达
式,用来指定从起始日期添加或减去的时间间隔值;

INTERVAL 关键字和类型修饰符大小写不敏感;

expr 是一个字符串,对于负值的时间间隔,它可以以一个“-”开头。

type 为关键词,它指示了表达式被解释的方式。
表 5-124 相关的type 和expr 参数说明
type 值
期望的expr 格式
MICROSECOND
MICROSECONDS
SECOND
SECONDS
MINUTE
MINUTES
HOUR
HOURS
DAY
DAYS
WEEK
WEEKS
MONTH
MONTHS
QUARTER
QUARTERS
YEAR
YEARS
SECOND_MICROSECOND
'SECONDS.MICROSECONDS'
MINUTE_MICROSECOND
'MINUTES.MICROSECONDS'
MINUTE_SECOND
'MINUTES:SECONDS'
HOUR_MICROSECOND
'HOURS.MICROSECONDS'
HOUR_SECOND
'HOURS:MINUTES:SECONDS'
HOUR_MINUTE
'HOURS:MINUTES'
DAY_MICROSECOND
'DAYS.MICROSECONDS'
DAY_SECOND
'DAYS HOURS:MINUTES:SECONDS'
DAY_MINUTE
'DAYS HOURS:MINUTES'
DAY_HOUR
'DAYS HOURS'
YEAR_MONTH
'YEARS-MONTHS'
说明

在expr 的格式中,GBase UP 允许任何字符作为定界符。表中所显示的是建议的定界
字符。如果date 参数是一个DATE 值,并且计算的间隔仅仅有YEAR、MONTH 和
DAY 部分(没有时间部分),那么返回值也是一个DATE 值。否则返回值是一个
DATETIME 值;

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 490

如果表达式另一边是DATE 或DATETIME 类型,那么INTERVAL expr type 允许出现
在“+”的任何一边。对于“-”来说,INTERVAL expr type 值只能出现在右边,因为
从一个时间间隔减去一个DATE 或DATETIME 值没有意义。
注意
不同引擎支持的参数情况不同, 例如,HIVE 引擎参数只支持
day,其余type 不支持。
8a 支持type 具体信息请参见上表5-109。
示例
示例1
将“2010-08-30 23:59:59”加1 秒。
gbase> SELECT '2010-08-30 23:59:59' + INTERVAL 1 SECOND FROM t;
+--------------------------------------------+
| '2010-08-30 23:59:59' + INTERVAL 1 SECOND |
+--------------------------------------------+
| 2010-08-31 00:00:00 |
+--------------------------------------------+
1 row in set
示例2
使用DATE_ADD()函数,将“2010-08-30 23:59:59”加一秒,执行结果与示例1 相
同。
gbase> SELECT DATE_ADD('2010-08-30 23:59:59',INTERVAL 1 SECOND) FROM t;
+---------------------------------------------------+
| DATE_ADD('2010-08-30 23:59:59',INTERVAL 1 SECOND) |
+---------------------------------------------------+
| 2010-08-31 00:00:00 |
+---------------------------------------------------+
1 row in set
示例3
将“2010-12-31 23:59:59”加一天。
gbase> SELECT INTERVAL 1 DAY + '2010-12-31 23:59:59' FROM t;
+----------------------------------------+
| INTERVAL 1 DAY + '2010-12-31 23:59:59' |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 491
+----------------------------------------+
| 2011-01-01 23:59:59 |
+----------------------------------------+
1 row in set
示例4
使用DATE_ADD()函数,将“2010-12-31 23:59:59”加一天,执行结果与示例3 相
同。
gbase> SELECT DATE_ADD('2010-12-31 23:59:59',INTERVAL 1 DAY) FROM t;
+------------------------------------------------+
| DATE_ADD('2010-12-31 23:59:59',INTERVAL 1 DAY) |
+------------------------------------------------+
| 2011-01-01 23:59:59 |
+------------------------------------------------+
1 row in set
示例5
DATE_ADD()函数,type 类型为“MINUTE_SECOND”。
gbase> SELECT DATE_ADD('2010-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND) FROM t;
+---------------------------------------------------------------+
| DATE_ADD('2010-12-31 23:59:59', INTERVAL '1:1' MINUTE_SECOND) |
+---------------------------------------------------------------+
| 2011-01-01 00:01:00 |
+---------------------------------------------------------------+
1 row in set
示例6
DATE_SUB()函数,type 类型为“DAY_SECOND”。
gbase> SELECT DATE_SUB('2010-01-01 00:00:00', INTERVAL '1 1:1:1' DAY_SECOND) FROM t;
+----------------------------------------------------------------+
| DATE_SUB('2010-01-01 00:00:00', INTERVAL '1 1:1:1' DAY_SECOND) |
+----------------------------------------------------------------+
| 2009-12-30 22:58:59 |
+----------------------------------------------------------------+
1 row in set
示例7
DATE_ADD()函数,type 类型为“DAY_HOUR”。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 492
gbase> SELECT DATE_ADD('2010-01-01 00:00:00', INTERVAL '-1 10' DAY_HOUR) FROM t;
+------------------------------------------------------------+
| DATE_ADD('2010-01-01 00:00:00', INTERVAL '-1 10' DAY_HOUR) |
+------------------------------------------------------------+
| 2009-12-30 14:00:00 |
+------------------------------------------------------------+
1 row in set

示例8
DATE_ADD()函数,type 类型为“DAY_HOUR”。
gbase> SELECT DATE_ADD('2010-01-01 00:00:00', INTERVAL '-1 -10' DAY_HOUR) FROM t;
+-------------------------------------------------------------+
| DATE_ADD('2010-01-01 00:00:00', INTERVAL '-1 -10' DAY_HOUR) |
+-------------------------------------------------------------+
| 2009-12-30 14:00:00 |
+-------------------------------------------------------------+
1 row in set
说明
因为“-1”是减去一天,
所以小时“-10”,
也是进行减法,
这个操作,
取决于最前面的操作符号。

下面示例里的写法,等价于示例7 的计算。
示例9
DATE_SUB()函数,type 类型为“DAY”。
gbase> SELECT DATE_SUB('2010-01-02', INTERVAL 31 DAY) FROM t;
+-----------------------------------------+
| DATE_SUB('2010-01-02', INTERVAL 31 DAY) |
+-----------------------------------------+
| 2009-12-02 |
+-----------------------------------------+
1 row in set
示例10
DATE_ADD()函数,type 类型为“SECOND_MICROSECOND”。
gbase> SELECT DATE_ADD('2010-08-31 23:59:59.000002',INTERVAL '1.999999'
SECOND_MICROSECOND) AS DATE_ADD FROM t;
+----------------------------+
| DATE_ADD |
+----------------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 493
| 2010-09-01 00:00:01.000001 |
+----------------------------+
1 row in set
说明

如果用户指定了一个过短的间隔值(没有包括type 关键词所期望的所有间隔部分),
GBase UP 假设用户遗漏了间隔值的最左边部分;

例如,如果指定一个type 为DAY_SECOND,那么expr 的值预期应当具有天、小时、
分钟和秒部分。如果用户指定的值像“1:10”这样的格式,GBase UP 假设天和小时部
分被遗漏了,
指定的值代表分钟和秒。
也就是说,
“1:10”
DAY_SECOND 等价于
“1:10”
MINUTE_SECOND。这类似于GBase UP 解释TIME 值为经过的时间而不是一天的时
刻;

如果用户从一个日期类型中加或减一个包含时间的值,结果会自动调节然后转换成日
期类型。
示例11
在“2010-01-30”上加1 天。
gbase> SELECT DATE_ADD('2010-08-30', INTERVAL 1 DAY) FROM t;
+----------------------------------------+
| DATE_ADD('2010-08-30', INTERVAL 1 DAY) |
+----------------------------------------+
| 2010-08-31 |
+----------------------------------------+
1 row in set
示例12
在日期类型中加1 个小时,返回结果转换为“日期+时间”类型。
gbase> SELECT DATE_ADD('2010-01-01', INTERVAL 1 HOUR) FROM t;
+-----------------------------------------+
| DATE_ADD('2010-01-01', INTERVAL 1 HOUR) |
+-----------------------------------------+
| 2010-01-01 01:00:00 |
+-----------------------------------------+
1 row in set
说明

如果用户使用了不正确的日期,返回结果将是NULL。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 494

如果用户增加MONTH、YEAR_MONTH 或YEAR,并且结果日期的天比新月份的最
大天数还大,那么它将被调整到新月份的最大天数。
示例13
在“2010-01-30”上加1 月。
gbase> SELECT DATE_ADD('2010-01-30', INTERVAL 1 MONTH) FROM t;
+------------------------------------------+
| DATE_ADD('2010-01-30', INTERVAL 1 MONTH) |
+------------------------------------------+
| 2010-02-28 |
+------------------------------------------+
1 row in set

DATE_FORMAT(date,FORMAT)
函数说明
依照FORMAT 字符串格式化date 值。
说明
表 5-125 可被用于format 字符串中格式说明
格 式
描 述
%a
星期名的英文缩写形式(Sun...Sat)
%b
月份的英文缩写形式(Jan...DEC)
%c
月份的数字形式(0...12)
%D
有英文后缀的某月的第几天(0th, 1st, 2nd, 3rd...)
%d
月份中的天数,数字形式(00...31)
%e
月份中的天数,数字形式(0...31)
%f
微秒(000000...999999)
%H
小时,24 小时制(00...23)
%h
小时,12 小时制(0,1...12)
%I
小时,12 小时制,个位数字前加0(01...12)
%i
分钟,数字形式(00...59)
%j
一年中的天数(001...366)
%k
小时,24 小时制(0...23)
%l
小时,12 小时制(1...12)
%M
月份,英文形式全拼(January...December)
%m
月份,数字形式(00...12)
%p
AM 或PM
%r
时间,12 小时制(HH:MI:SS 后面紧跟AM 或PM)

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 495
格 式
描 述
%S
秒(00...59)
%s
秒(00...59)
%T
时间,24 小时(HH:MI:SS)
%U
星期(00...53),星期日是一个星期的第一天
%u
星期(00...53),星期一是一个星期的第一天
%V
星期(01...53),星期日是一个星期的第一天。
与“%X”一起使用
%v
星期(01...53),星期一是一个星期的第一天。
与“%x”一起使用
%W
星期名的英文全拼形式(Sunday...Saturday)
%w
一星期中的哪一天(0=Sunday...6=Saturday)
%X
以4 位数字形式反映周所在的年份,星期日周的第一天
%x
以4 位数字形式反映周所在的年份,星期日周的第一天
%Y
4 位数字形式表达的年份
%y
2 位数字形式表达的年份
%%
一个字母“%”

注意

“%”字符要求在格式指定符之前;

所有其它的字符不经过解释,直接复制到结果中。
示例
示例1
FORMAT 格式为“%W %M %Y”。
gbase> SELECT DATE_FORMAT('2010-10-04 22:23:00', '%W %M %Y') FROM t;
+------------------------------------------------+
| DATE_FORMAT('2010-10-04 22:23:00', '%W %M %Y') |
+------------------------------------------------+
| Monday October 2010 |
+------------------------------------------------+
1 row in set
示例2
FORMAT 格式为“%H:%i:%s”。
gbase> SELECT DATE_FORMAT('2010-10-04 22:23:00', '%H:%i:%s') FROM t;
+------------------------------------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 496
| DATE_FORMAT('2010-10-04 22:23:00', '%H:%i:%s') |
+------------------------------------------------+
| 22:23:00 |
+------------------------------------------------+
1 row in set
示例3
FORMAT 格式为“%D %y %a %d %m %b %j”。
gbase> SELECT DATE_FORMAT('2010-10-04 22:23:00','%D %y %a %d %m %b %j') FROM t;
+-----------------------------------------------------------+
| DATE_FORMAT('2010-10-04 22:23:00','%D %y %a %d %m %b %j') |
+-----------------------------------------------------------+
| 4th 10 Mon 04 10 Oct 277 |
+-----------------------------------------------------------+
1 row in set
示例4
FORMAT 格式为“%H %k %I %r %T %S %w”。
gbase> SELECT DATE_FORMAT('2010-10-04 22:23:00','%H %k %I %r %T %S %w') FROM t;
+-----------------------------------------------------------+
| DATE_FORMAT('2010-10-04 22:23:00','%H %k %I %r %T %S %w') |
+-----------------------------------------------------------+
| 22 22 10 10:23:00 PM 22:23:00 00 1 |
+-----------------------------------------------------------+
1 row in set
示例5
FORMAT 格式为“%X %V”。
gbase> SELECT DATE_FORMAT('2010-01-01', '%X %V') FROM t;
+------------------------------------+
| DATE_FORMAT('2010-01-01', '%X %V') |
+------------------------------------+
| 2009 52 |
+------------------------------------+
1 row in set

DAY(date)
函数说明
返回date 是一个月中的第几天,范围为0 到31。
示例

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 497
示例1
返回“2010-08-30”是8 月中的第几天。
gbase> SELECT DAY('2010-08-30'),DAYOFMONTH('2010-08-30') FROM t;
+-------------------+--------------------------+
| DAY('2010-08-30') | DAYOFMONTH('2010-08-30') |
+-------------------+--------------------------+
| 30 | 30 |
+-------------------+--------------------------+
1 row in set
说明
HIVE 引擎DAY()函数的返回值与HIVE 一致。

DAYNAME(date)
函数说明
返回给出的日期date 是星期几。
示例
示例1
返回“2010-08-30”是星期几。
gbase> SELECT DAYNAME('2010-08-30') FROM t;
+-----------------------+
| DAYNAME('2010-08-30') |
+-----------------------+
| Monday |
+-----------------------+
1 row in set

DAYOFMONTH(date)
函数说明

返回date 是一个月中的第几天,范围为0 到31;

DAYOFMONTH()等价于DAY()。
示例

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 498
示例1
返回“2010-08-30”是8 月中的第几天。
gbase> SELECT DAYOFMONTH('2010-08-30') FROM t;
+--------------------------+
| DAYOFMONTH('2010-08-30') |
+--------------------------+
| 30 |
+--------------------------+
1 row in set
示例2
“2001-11-00”是11 月的第几天。
gbase> SELECT DAYOFMONTH('2001-11-00') FROM t;
+--------------------------+
| DAYOFMONTH('2001-11-00') |
+--------------------------+
| 0 |
+--------------------------+
1 row in set
示例3
返回“2001-11-10”是11 月的第几天。
gbase> SELECT DAYOFMONTH('2001-11-10') FROM t;
+--------------------------+
| DAYOFMONTH('2001-11-10') |
+--------------------------+
| 10 |
+--------------------------+
1 row in set
说明
HIVE 引擎DAYOFMONTH(date)函数的返回值与HIVE 一致。

DAYOFWEEK(date)
函数说明
返回date (1 = 周日, 2 = 周一, ..., 7 = 周六)对应的工作日索引。
示例

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 499
示例1
“2010-08-30”是周一,返回对应的工作日索引为2。
gbase> SELECT DAYOFWEEK('2010-08-30') FROM t;
+-------------------------+
| DAYOFWEEK('2010-08-30') |
+-------------------------+
| 2 |
+-------------------------+
1 row in set

DAYOFYEAR(date)
函数说明
返回date 是一年中的第几天,范围为1 到366。
示例
示例1
返回“2010-08-30”是2010 年的第几天。
gbase> SELECT DAYOFYEAR('2010-08-30') FROM t;
+-------------------------+
| DAYOFYEAR('2010-08-30') |
+-------------------------+
| 242 |
+-------------------------+
1 row in set
示例2
返回“2000-12-31”是2000 年的第几天。
gbase> SELECT DAYOFYEAR('2000-12-31') FROM t;
+-------------------------+
| DAYOFYEAR('2000-12-31') |
+-------------------------+
| 366 |
+-------------------------+
1 row in set

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 500

EXTRACT(type FROM date)
函数说明
EXTRACT()函数使用与DATE_ADD()或DATE_SUB()一致的间隔类型,
但是它用于
指定从日期中提取的部分,而不是进行日期算术运算。
注意
oracle 引擎不支持该函数。
说明
下表为可返回的type 类型,type 类型可组合使用。
表 5-126 type 类型说明
约 定
说 明

year
季度
quarter

month

day
星期
week
小时
hour
分钟
minute

second
微秒
microsecond
示例
示例1
返回的结果是日期中的“年”。
gbase> SELECT EXTRACT(YEAR FROM '2010-08-30') FROM t;
+---------------------------------+
| EXTRACT(YEAR FROM '2010-08-30') |
+---------------------------------+
| 2010 |
+---------------------------------+
1 row in set
示例2

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 501
返回的结果是日期中的“年月”。
gbase> SELECT EXTRACT(YEAR_MONTH FROM '2010-08-30 01:02:03') FROM t;
+------------------------------------------------+
| EXTRACT(YEAR_MONTH FROM '2010-08-30 01:02:03') |
+------------------------------------------------+
| 201008 |
+------------------------------------------------+
1 row in set
示例3
返回的结果是日期中“日小时分钟”的部分。
gbase> SELECT EXTRACT(DAY_MINUTE FROM '2010-08-30 01:02:03') FROM t;
+------------------------------------------------+
| EXTRACT(DAY_MINUTE FROM '2010-08-30 01:02:03') |
+------------------------------------------------+
| 300102 |
+------------------------------------------------+
1 row in set
示例4
返回结果是“1230”,表示1230 微秒。
gbase> SELECT EXTRACT(MICROSECOND FROM '2010-08-30 10:30:00.00123') FROM t;
+-------------------------------------------------------+
| EXTRACT(MICROSECOND FROM '2010-08-30 10:30:00.00123') |
+-------------------------------------------------------+
| 1230 |
+-------------------------------------------------------+
1 row in set
示例5
返回结果“36”,表示2011 年的第36 周。
gbase> SELECT EXTRACT(WEEK FROM '2011-09-05 10:30:00.00123') FROM t;
+------------------------------------------------+
| EXTRACT(WEEK FROM '2011-09-05 10:30:00.00123') |
+------------------------------------------------+
| 36 |
+------------------------------------------------+
1 row in set

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 502

FROM_DAYS(N)
函数说明
返回天数N 对应的DATE 值。
示例
示例1
“734309”对应的DATE 为“2010-06-21”。
gbase> SELECT FROM_DAYS(734309) FROM t;
+-------------------+
| FROM_DAYS(734309) |
+-------------------+
| 2010-06-21 |
+-------------------+
1 row in set

FROM_UNIXTIME()
函数说明
FROM_UNIXTIME(unix_timestamp)
FROM_UNIXTIME(unix_timestamp,FORMAT)
说明

以“YYYY-MM-DD HH:MI:SS”或“YYYYMMDDHHMISS”格式返回一个
unix_timestamp 参数值,返回值的形式取决于它使用在字符串中还是数字中;

如果FORMAT 已经给出,则返回值的格式依照FORMAT 字符串的格式。FORMAT
可以包含与DATE_FORMAT()函数同样的修饰符。
注意
UP hive 引擎只支持FROM_UNIXTIME(unix_timestamp),不支持
FROM_UNIXTIME(unix_timestamp,FORMAT)

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 503
示例
示例1
返回“YYYY-MM-DDHH:MI:SS”格式的日期时间值。
gbase> SELECT FROM_UNIXTIME(1275996580) FROM t;
+---------------------------+
| FROM_UNIXTIME(1275996580) |
+---------------------------+
| 2010-06-08 19:29:40 |
+---------------------------+
1 row in set
示例2
返回“YYYYMMDDHHMISS”格式的日期时间值。
gbase> select FROM_UNIXTIME(1275996580) + 1 FROM t8a;
+-------------------------------+
| FROM_UNIXTIME(1275996580) + 1 |
+-------------------------------+
| 2010-06-09 19:29:40 |
+-------------------------------+
1 row in set (Elapsed: 00:00:00.04)
HIVE 引擎执行如下结果:
gbase> select FROM_UNIXTIME(1275996580) + 1 FROM t;
+-------------------------------+
| FROM_UNIXTIME(1275996580) + 1 |
+-------------------------------+
| NULL |
+-------------------------------+
1 row in set (Elapsed: 00:00:00.36)
示例3
FORMAT 为“%Y %D %M %h:%i:%s %x”。
gbase> SELECT FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %D %M %h:%i:%s %x') FROM t;
+--------------------------------------------------------+
| FROM_UNIXTIME(UNIX_TIMESTAMP(),'%Y %D %M %h:%i:%s %x') |
+--------------------------------------------------------+
| 2013 12th October 11:10:46 2013 |
+--------------------------------------------------------+
1 row in set

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 504

GET_FORMAT()
函数说明
GET_FORMAT(DATE|TIME|DATETIME,EUR'|'USA'|'JIS'|'ISO'|'INTERNAL')

返回一个格式字符串;

这个函数可以与DATE_FORMAT()函数或STR_TO_DATE()函数进行组合。
说明
对于参数DATE,DATETIME 和TIME,各有五种可能值,共计十五种格式字符串:
表 5-127 DATE,DATETIME 和TIME 字符串格式说明
函数调用
结 果
GET_FORMAT(DATE,'USA')
'%m.%d.%Y'
GET_FORMAT(DATE,'JIS')
'%Y-%m-%d'
GET_FORMAT(DATE,'ISO')
'%Y-%m-%d'
GET_FORMAT(DATE,'EUR')
'%d.%m.%Y'
GET_FORMAT(DATE,'INTERNAL')
'%Y%m%d'
GET_FORMAT(DATETIME,'USA')
'%Y-%m-%d-%H.%i.%s'
GET_FORMAT(DATETIME,'JIS')
'%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'ISO')
'%Y-%m-%d %H:%i:%s'
GET_FORMAT(DATETIME,'EUR')
'%Y-%m-%d-%H.%i.%s'
GET_FORMAT(DATETIME,'INTERNAL')
'%Y%m%d%H%i%s'
GET_FORMAT(TIME,'USA')
'%h:%i:%s %p'
GET_FORMAT(TIME,'JIS')
'%H:%i:%s'
GET_FORMAT(TIME,'ISO')
'%H:%i:%s'
GET_FORMAT(TIME,'EUR')
'%H.%i.%S'
GET_FORMAT(TIME,'INTERNAL')
'%H%i%s'

对于上述表中使用的说明符的作用,请参见“DATE_FORMAT(date,FORMAT)”中的
表。
示例
示例1
DATE_FORMAT()与GET_FORMAT()函数进行组合。
GET_FORMAT(DATE,'EUR')对应输出的格式为“%d.%m.%Y”。
gbase> SELECT DATE_FORMAT('2010-08-30',GET_FORMAT(DATE,'EUR')) FROM t;
+--------------------------------------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 505
| DATE_FORMAT('2010-08-30',GET_FORMAT(DATE,'EUR')) |
+--------------------------------------------------+
| 30.08.2010 |
+--------------------------------------------------+
1 row in set
示例2
STR_TO_DATE()与GET_FORMAT()函数进行组合。
GET_FORMAT(DATE,'USA')对应的输出格式为“%m.%d.%Y”。
gbase> SELECT STR_TO_DATE('08.30.2010',GET_FORMAT(DATE,'USA')) FROM t;
+--------------------------------------------------+
| STR_TO_DATE('08.30.2010',GET_FORMAT(DATE,'USA')) |
+--------------------------------------------------+
| 2010-08-30 |
+--------------------------------------------------+
1 row in set

HOUR(time)
函数说明
返回time 对应的小时值,对于日时值的返回值范围是从0 到23。
示例
示例1
返回“10:05:03”对应的小时值。
gbase> SELECT HOUR('10:05:03') FROM t;
+------------------+
| HOUR('10:05:03') |
+------------------+
| 10 |
+------------------+
1 row in set
示例2
time 值范围实际上很大,因此HOUR 返回值可以比23 大。
gbase> SELECT HOUR('272:59:59') FROM t;
+-------------------+
| HOUR('272:59:59') |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 506
+-------------------+
| 272 |
+-------------------+
1 row in set

LAST_DAY(date)
函数说明
返回date 中当前月对应的最后一天的值。
说明

其中,date 为日期或日期时间类型。

如果参数date 无效,则返回NULL。
示例
示例1
date 值为有效日期,返回2011 年8 月份的最后一天。
gbase> SELECT LAST_DAY('2011-08-30') FROM t;
+------------------------+
| LAST_DAY('2011-08-30') |
+------------------------+
| 2011-08-31 |
+------------------------+
1 row in set
示例2
date 值为有效日期,返回2011 年2 月份的最后一天。
gbase> SELECT LAST_DAY('2011-02-05') FROM t;
+------------------------+
| LAST_DAY('2011-02-05') |
+------------------------+
| 2011-02-28 |
+------------------------+
1 row in set
示例3
date 值为为日期时间类型的有效日期,返回2011 年1 月份的最后一天。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 507
gbase> SELECT LAST_DAY('2011-01-01 01:01:01') FROM t;
+---------------------------------+
| LAST_DAY('2011-01-01 01:01:01') |
+---------------------------------+
| 2011-01-31 |
+---------------------------------+
1 row in set
示例4
date 值为无效日期,返回结果为NULL。
gbase> SELECT LAST_DAY('2011-08-32') FROM t;
+------------------------+
| LAST_DAY('2011-08-32') |
+------------------------+
| NULL |
+------------------------+
1 row in set, 2 warnings

gbase> SHOW WARNINGS;
+-------+------+
| Level | Code |
+-------+------+
| Note | 1292 |
| Note | 1292 |
+-------+------+
+--------------------------------------------------------------+
| Message |
+--------------------------------------------------------------+
| 192.168.10.115:5050 - Incorrect datetime value: '2011-08-32' |
| 192.168.10.116:5050 - Incorrect datetime value: '2011-08-32' |
+--------------------------------------------------------------+
2 row in set
说明
输入非法的日期时,不同的引擎表现不同,8a 返回NULL 值,其它引擎可能报错。

LOCALTIME,LOCALTIME()
函数说明
LOCALTIME 和LOCALTIME()等同于NOW()。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 508
示例
示例1
使用LOCALTIME 函数,返回当前“日期+时间”。
gbase> SELECT LOCALTIME FROM t;
+---------------------+
| LOCALTIME |
+---------------------+
| 2013-10-12 11:15:46 |
+---------------------+
1 row in set
示例2
使用LOCALTIME()函数,返回当前“日期+时间”。
gbase> SELECT LOCALTIME() FROM t;
+---------------------+
| LOCALTIME() |
+---------------------+
| 2013-10-12 11:16:04 |
+---------------------+
1 row in set
示例3
使用NOW()函数,返回当前“日期+时间”。
gbase> SELECT NOW() FROM t;
+---------------------+
| NOW() |
+---------------------+
| 2013-10-12 11:16:19 |
+---------------------+
1 row in set

LOCALTIMESTAMP,LOCALTIMESTAMP()
函数说明
LOCALTIMESTAMP 和LOCALTIMESTAMP()等同于NOW()。
示例1
使用LOCALTIMESTAMP 函数,返回当前时间戳。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 509
gbase> SELECT LOCALTIMESTAMP FROM t;
+---------------------+
| LOCALTIMESTAMP |
+---------------------+
| 2013-10-12 11:16:33 |
+---------------------+
1 row in set
示例2
使用LOCALTIMESTAMP()函数,返回当前时间戳。
gbase> SELECT LOCALTIMESTAMP() FROM t;
+---------------------+
| LOCALTIMESTAMP() |
+---------------------+
| 2013-10-12 11:16:45 |
+---------------------+
1 row in set
示例3
使用NOW()函数,返回当前“日期+时间”。
gbase> SELECT NOW() FROM t;
+---------------------+
| NOW() |
+---------------------+
| 2013-10-12 11:17:09 |
+---------------------+
1 row in set

MAKEDATE(year,dayofyear)
函数说明

给出年份值year 和一年中的天数值dayofyear,返回日期值;

dayofyear 必须大于0,否则返回NULL。
示例
示例1
返回2011 年第31 天和第32 天对应的日期。
gbase> SELECT MAKEDATE(2011,31), MAKEDATE(2011,32) FROM t;

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 510
+-------------------+-------------------+
| MAKEDATE(2011,31) | MAKEDATE(2011,32) |
+-------------------+-------------------+
| 2011-01-31 | 2011-02-01 |
+-------------------+-------------------+
1 row in set
示例2
返回2010 年和2011 年第365 天对应的日期。
gbase> SELECT MAKEDATE(2010,365), MAKEDATE(2011,365) FROM t;
+--------------------+--------------------+
| MAKEDATE(2010,365) | MAKEDATE(2011,365) |
+--------------------+--------------------+
| 2010-12-31 | 2011-12-31 |
+--------------------+--------------------+
1 row in set
示例3
dayofyear 值等于0,返回NULL。
gbase> SELECT MAKEDATE(2011,0) FROM t;
+------------------+
| MAKEDATE(2011,0) |
+------------------+
| NULL |
+------------------+
1 row in set

MAKETIME(hour,minute,second)
函数说明
返回从hour,minute,second 计算得到的时间值。
示例
示例1
返回“12,15,30”对应的时分秒的值。
gbase> SELECT MAKETIME(12,15,30) FROM t;
+--------------------+
| MAKETIME(12,15,30) |
+--------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 511
| 12:15:30 |
+--------------------+
1 row in set

MICROSECOND(expr)
函数说明
以数字的形式返回time 或者datetime 表达式expr 中的微秒值,数字取值范围是0
到999999。
示例
示例1
返回time 中的微秒值。
gbase> SELECT MICROSECOND('12:00:00.123456') FROM t;
+--------------------------------+
| MICROSECOND('12:00:00.123456') |
+--------------------------------+
| 123456 |
+--------------------------------+
1 row in set
示例2
返回datetime 中的微秒值。
gbase> SELECT MICROSECOND('2009-12-31 23:59:59.000010') FROM t;
+-------------------------------------------+
| MICROSECOND('2009-12-31 23:59:59.000010') |
+-------------------------------------------+
| 10 |
+-------------------------------------------+
1 row in set
示例3
datetime 中的微秒值超过六位,结果返回前六位。
gbase> SELECT MICROSECOND('2009-12-31 23:59:59.1234567') FROM t;
+--------------------------------------------+
| MICROSECOND('2009-12-31 23:59:59.1234567') |
+--------------------------------------------+
| 123456 |
+--------------------------------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 512
1 row in set, 2 warnings

gbase> SHOW WARNINGS;
+-------+------+
| Level | Code |
+-------+------+
| Note | 1292 |
| Note | 1292 |
+-------+------+
+----------------------------------------------------------------------------------+
| Message |
+----------------------------------------------------------------------------------+
| 192.168.10.115:5050 - Truncated incorrect time value: '2009-12-31 23:59:59.1234567'|
| 192.168.10.116:5050 - Truncated incorrect time value: '2009-12-31 23:59:59.1234567'|
+----------------------------------------------------------------------------------+
2 row in set

MINUTE(time)
函数说明
返回time 对应的分钟值,范围为0 到59。
示例
示例1
time 值对应的分钟值在0~59 之内。
gbase> SELECT MINUTE('01-02-03 10:08:03') FROM t;
+-----------------------------+
| MINUTE('01-02-03 10:08:03') |
+-----------------------------+
| 8 |
+-----------------------------+
1 row in set
示例2
time 值对应的分钟值大于59,返回NULL。
gbase> SELECT MINUTE('01-02-03 10:60:03') FROM t;
+-----------------------------+
| MINUTE('01-02-03 10:60:03') |
+-----------------------------+
| NULL |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 513
+-----------------------------+
1 row in set, 2 warnings

gbase> SHOW WARNINGS;
+-------+------+
| Level | Code |
+-------+------+
| Note | 1292 |
| Note | 1292 |
+-------+------+
+-------------------------------------------------------------------------+
| Message |
+-------------------------------------------------------------------------+
| 192.168.10.115:5050 - Truncated incorrect time value: '01-02-03 10:60:03' |
| 192.168.10.116:5050 - Truncated incorrect time value: '01-02-03 10:60:03' |
+-------------------------------------------------------------------------+
2 row in set

MONTH(date)
函数说明
返回date 中对应的月份数值,范围为1 到12。
示例
示例1
date 值对应的月份值在1~12 之内。
gbase> SELECT MONTH('2011-08-30') FROM t;
+---------------------+
| MONTH('2011-08-30') |
+---------------------+
| 8 |
+---------------------+
1 row in set
示例2
date 值对应的月份值大于12,返回NULL。
gbase> SELECT MONTH('2011-13-30') FROM t;
+---------------------+
| MONTH('2011-13-30') |
+---------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 514
| NULL |
+---------------------+
1 row in set, 2 warnings

MONTHNAME(date)
函数说明
返回date 中对应的月份,并以英文名称显示。
示例
示例1
返回8 月对应的英文名称。
gbase> SELECT MONTHNAME('2011-08-30') FROM t;
+-------------------------+
| MONTHNAME('2011-08-30') |
+-------------------------+
| August |
+-------------------------+
1 row in set

NOW()
函数说明
以“YYYY-MM-DD HH:MI:SS”或“YYYYMMDDHHMISS”格式返回当前的日期
时间值,返回的格式取决于该函数是用于字符串还是数字上下文中。
示例
示例1
返回“YYYY-MM-DD HH:MI:SS”格式的日期时间值。
gbase> SELECT NOW() FROM t;
+---------------------+
| NOW() |
+---------------------+
| 2013-10-12 11:25:32 |
+---------------------+
1 row in set

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 515

PERIOD_ADD(P,N)
函数说明
增加N 个月到周期P 中,返回值格式为YYYYMM。
说明
其中,P 的格式为YYMM 或YYYYMM。
注意
参数P 不是日期类型的数值。
示例
示例1
增加2 个月到“1108”中。
gbase> SELECT PERIOD_ADD(1108,2) FROM t;
+--------------------+
| PERIOD_ADD(1108,2) |
+--------------------+
| 201110 |
+--------------------+
1 row in set
示例2
增加2 个月到“201108”中。
gbase> SELECT PERIOD_ADD(201108,2) FROM t;
+----------------------+
| PERIOD_ADD(201108,2) |
+----------------------+
| 201110 |
+----------------------+
1 row in set

PERIOD_DIFF(P1,P2)
函数说明

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 516
返回P1 和P2 之间的月份数。
说明
P1 和P2 的格式以YYMM 或YYYYMM 指定。
示例
示例1
返回“9802”和“199703”之间相隔的月份数。
gbase> SELECT PERIOD_DIFF(9802,199703) FROM t;
+--------------------------+
| PERIOD_DIFF(9802,199703) |
+--------------------------+
| 11 |
+--------------------------+
1 row in set

QUARTER(date)
函数说明
返回date 所代表的时间在年中的季度数,范围为1~4。
示例
示例1
返回“10-08-01”在2010 年中是第几季度。
gbase> SELECT QUARTER('10-08-01') FROM t;
+---------------------+
| QUARTER('10-08-01') |
+---------------------+
| 3 |
+---------------------+
1 row in set

SECOND(time)
函数说明
返回time 对应的秒数,范围为0~59。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 517
示例
示例1
返回“10:05:03”对应的秒数。
gbase> SELECT SECOND('10:05:03') FROM t;
+--------------------+
| SECOND('10:05:03') |
+--------------------+
| 3 |
+--------------------+
1 row in set

SEC_TO_TIME(seconds)
函数说明
以“HH:MI:SS”或“HHMISS”格式返回参数seconds 被转换为时分秒后的值,返
回值的形式取决于该函数使用于字符串还是数字上下文。
示例
示例1
将“2378”转换为时分秒后,以“HH:MI:SS”格式返回该值。
gbase> SELECT SEC_TO_TIME(2378) FROM t;
+-------------------+
| SEC_TO_TIME(2378) |
+-------------------+
| 00:39:38 |
+-------------------+
1 row in set
示例2
将“2378”转换为时分秒后,与整数计算返回NULL。
gbase> SELECT SEC_TO_TIME(2378) + 0 FROM t;
+-----------------------+
| SEC_TO_TIME(2378) + 0 |
+-----------------------+
| NULL |
+-----------------------+
1 row in set

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 518

STR_TO_DATE(str,format)
函数说明
STR_TO_DATE()是DATE_FORMAT()函数的反函数。
说明

它获得字符串str 和一个格式化字符串format。

如果格式字符串包含日期和时间部分,则STR_TO_DATE()返回一个DATETIME,否
则当只包含日期或时间部分时,返回DATE 或TIME 值。

包含在str 中的日期,time 或者datetime 值应该按照format 的格式给定。对于format
可用的详细形式,参考“5.4.6.5.13 DATE_FORMAT(date,FORMAT)”中的表格。

如果str 包含一个非法日期时间或者datetime,
STR_TO_DATE()返回NULL。
一个非法
值也会给出一个警告。
示例
示例1
format 的值为“%d.%m.%Y %H.%i”。
gbase> SELECT STR_TO_DATE('30.08.2010 09.20', '%d.%m.%Y %H.%i') FROM t;
+---------------------------------------------------+
| STR_TO_DATE('30.08.2010 09.20', '%d.%m.%Y %H.%i') |
+---------------------------------------------------+
| 2010-08-30 09:20:00 |
+---------------------------------------------------+
1 row in set
示例2
将“10arp”以“%carp”格式返回。
gbase> SELECT STR_TO_DATE('10arp', '%carp') FROM t;
+-------------------------------+
| STR_TO_DATE('10arp', '%carp') |
+-------------------------------+
| 2013-10-01 |
+-------------------------------+
1 row in set
示例3

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 519
format 的值为“%Y-%m-%d %H:%i:%s”。
gbase> SELECT STR_TO_DATE('2010-15-08 00:00:00','%Y-%m-%d %H:%i:%s') FROM t;
+--------------------------------------------------------+
| STR_TO_DATE('2010-15-08 00:00:00','%Y-%m-%d %H:%i:%s') |
+--------------------------------------------------------+
| NULL |
+--------------------------------------------------------+
1 row in set, 2 warnings
示例4
如果str 取值为0,则返回系统当前年,当前月,当前日为1 的日期组合。
gbase> SELECT STR_TO_DATE('00/00/0000', '%m/%d/%Y') FROM t;
+---------------------------------------+
| STR_TO_DATE('00/00/0000', '%m/%d/%Y') |
+---------------------------------------+
| 2013-10-01 |
+---------------------------------------+
1 row in set
示例5:
format 的值为“%m/%d/%Y”。
gbase> SELECT STR_TO_DATE('08/30/2011', '%m/%d/%Y') FROM t;
+---------------------------------------+
| STR_TO_DATE('08/30/2011', '%m/%d/%Y') |
+---------------------------------------+
| 2011-08-30 |
+---------------------------------------+
1 row in set
示例6
注意不能使用格式“%X%V”将一个“year-week”字符串转化为一个日期,原因是
当一个星期跨越一个月份界限时,
一个年和星期的组合不能标示一个唯一的年和月
份。若要将“year-week”转化为一个日期,则也应指定具体工作日
gbase> SELECT str_to_date('201135 Monday', '%X%V %W') FROM t;
+-----------------------------------------+
| str_to_date('201135 Monday', '%X%V %W') |
+-----------------------------------------+
| 2011-08-29 |
+-----------------------------------------+
1 row in set

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 520
示例7
不存在的日期返回系统当前日期。
gbase> SELECT str_to_date('201135', '%X%V %W') FROM t;
+----------------------------------+
| str_to_date('201135', '%X%V %W') |
+----------------------------------+
| 2013-10-01 |
+----------------------------------+
1 row in set

SUBDATE()
函数说明
SUBDATE(date,INTERVAL expr type)
SUBDATE(expr,days)
说明

当调用的第二个参数带有INTERVA()时,
SUBDATE()等同于DATE_SUB()。
具体信息
请参见“DATE_ADD(),DATE_SUB()”。

expr 是一个date 或datetime 表达式,days 用于减expr 的天数。
示例
示例1
使用DATE_SUB 函数,将“2011-01-02”减去31 天。
gbase> SELECT DATE_SUB('2011-01-02', INTERVAL 31 DAY) FROM t;
+-----------------------------------------+
| DATE_SUB('2011-01-02', INTERVAL 31 DAY) |
+-----------------------------------------+
| 2010-12-02 |
+-----------------------------------------+
1 row in set
示例2
使用SUBDATE 函数,将“2011-01-02”减去31 天。
gbase> SELECT SUBDATE('2011-01-02', INTERVAL 31 DAY) FROM t;
+----------------------------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 521
| SUBDATE('2011-01-02', INTERVAL 31 DAY) |
+----------------------------------------+
| 2010-12-02 |
+----------------------------------------+
1 row in set
示例3
使用SUBDATE 函数,将“2011-01-02 12:00:00”减去31 天。
gbase> SELECT SUBDATE('2011-01-02 12:00:00', 31) FROM t;
+------------------------------------+
| SUBDATE('2011-01-02 12:00:00', 31) |
+------------------------------------+
| 2010-12-02 12:00:00 |
+------------------------------------+
1 row in set

SUBTIME(expr,expr2)
函数说明
SUBTIME()将expr2 从expr 中减去并返回结果。
说明
expr 是一个time 或者datetime 表达式,expr2 是一个时间表达式。
示例
示例1
返回“2009-12-31 23:59:59.999999”减去“1 1:1:1.000002”的值。
gbase> SELECT SUBTIME('2009-12-31 23:59:59.999999','1 1:1:1.000002') FROM t;
+--------------------------------------------------------+
| SUBTIME('2009-12-31 23:59:59.999999','1 1:1:1.000002') |
+--------------------------------------------------------+
| 2009-12-30 22:58:58.999997 |
+--------------------------------------------------------+
1 row in set
示例2
返回“01:00:00.999999”减去“02:00:00.999998”的值。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 522
gbase> SELECT SUBTIME('01:00:00.999999', '02:00:00.999998') FROM t;
+-----------------------------------------------+
| SUBTIME('01:00:00.999999', '02:00:00.999998') |
+-----------------------------------------------+
| -00:59:59.999999 |
+-----------------------------------------------+
1 row in set

SYSDATE()
函数说明
以“YYYY-MM-DD HH:MI:SS”或“YYYYMMDDHHMISS”格式返回UP 当前的
日期时间值,返回的格式取决于该函数是用于字符串还是数字上下文中。
示例
示例1
使用SYSDATE()函数返回UP 当前的“日期+时间”。
gbase> SELECT SYSDATE() FROM t;
+---------------------+
| SYSDATE() |
+---------------------+
| 2013-10-12 13:39:15 |
+---------------------+
1 row in set

TIME(expr)
函数说明
将时间部分从time 或者datetime 表达式expr 中取出来,并按照字符串格式返回。
示例
示例1
以字符串格式返回“2011-08-30 01:02:03”中的时间值。
gbase> SELECT TIME('2011-08-30 01:02:03') FROM t;
+-----------------------------+
| TIME('2011-08-30 01:02:03') |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 523
+-----------------------------+
| 01:02:03 |
+-----------------------------+
1 row in set
示例2
以字符串格式返回“2011-08-30 01:02:03.000123”中的时间值。
gbase> SELECT TIME('2011-08-30 01:02:03.000123') FROM t;
+------------------------------------+
| TIME('2011-08-30 01:02:03.000123') |
+------------------------------------+
| 01:02:03.000123 |
+------------------------------------+
1 row in set

TIMEDIFF(expr,expr2)
函数说明
TIMEDIFF()返回开始时间expr 和结束时间expr2 之间的间隔时间。
说明
expr 和expr2 是time 或者datetime 表达式,但是两个表达式必须是同种类型。
示例
示例1
expr 和expr2 都是time 表达式,返回“2000:01:01 00:00:00”和“2000:01:01
00:00:00.000001”之间的间隔时间。
gbase> SELECT TIMEDIFF('2000:01:01 00:00:00','2000:01:01 00:00:00.000001') FROM t;
+--------------------------------------------------------------+
| TIMEDIFF('2000:01:01 00:00:00','2000:01:01 00:00:00.000001') |
+--------------------------------------------------------------+
| -00:00:00.000001 |
+--------------------------------------------------------------+
1 row in set
示例2
expr 和expr2 都是datetime 表达式,
返回
“2011-08-31 23:59:59.000001”

“2011-08-30
01:01:01.000002”之间的间隔时间。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 524
gbase> SELECT TIMEDIFF('2011-08-31 23:59:59.000001','2011-08-30 01:01:01.000002')
FROM t;
+---------------------------------------------------------------------+
| TIMEDIFF('2011-08-31 23:59:59.000001','2011-08-30 01:01:01.000002') |
+---------------------------------------------------------------------+
| 46:58:57.999999 |
+---------------------------------------------------------------------+
1 row in set


TIMESTAMP
函数说明
TIMESTAMP(expr),TIMESTAMP(expr,expr2)
说明

TIMESTAMP(expr),按照datetime 值返回日期或者datetime 表达式expr;

TIMESTAMP(expr,expr2),将时间表达式expr2 加到时间表达式expr 上,然后返回一
个datetime 值。
示例
示例1
使用TIMESTAMP(expr)函数,返回“2011-08-30”对应的datetime 值。
gbase> SELECT TIMESTAMP('2011-08-30') FROM t;
+-------------------------+
| TIMESTAMP('2011-08-30') |
+-------------------------+
| 2011-08-30 00:00:00 |
+-------------------------+
1 row in set
示例2
使用TIMESTAMP(expr,expr2)函数,将“12:00:00”加到“2011-12-31 12:00:00”,
并返回其对应的datetime 值。
gbase> SELECT TIMESTAMP('2011-12-31 12:00:00','12:00:00') FROM t;
+---------------------------------------------+
| TIMESTAMP('2011-12-31 12:00:00','12:00:00') |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 525
+---------------------------------------------+
| 2012-01-01 00:00:00 |
+---------------------------------------------+
1 row in set

TIMESTAMPADD
函数说明
TIMESTAMPADD(interval,int_expr,datetime_expr)
说明

将整数表达式int_expr 加到date 或者datetime 表达式datetime_expr 上;

int_expr 的单位由interval 参数给定,应该是下列值之一:
FRAC_SECOND,
SECOND,
MINUTE,
HOUR,
DAY,
WEEK,
MONTH,
QUARTER,
或YEAR。

interval 值可以使用上面的关键词指定,或者使用前缀SQL_TSI_。例如DAY 或
SQL_TSI_DAY,或者两者都可以。
示例
示例1
将“1”分钟加到“2011-01-02”上。
gbase> SELECT TIMESTAMPADD(MINUTE,1,'2011-01-02') FROM t;
+-------------------------------------+
| TIMESTAMPADD(MINUTE,1,'2011-01-02') |
+-------------------------------------+
| 2011-01-02 00:01:00 |
+-------------------------------------+
1 row in set
示例2
将“1”周加到“2011-01-02”上。
gbase> SELECT TIMESTAMPADD(WEEK,1,'2011-01-02') FROM t;
+-----------------------------------+
| TIMESTAMPADD(WEEK,1,'2011-01-02') |
+-----------------------------------+
| 2011-01-09 |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 526
+-----------------------------------+
1 row in set

TIMESTAMPDIFF
函数说明
TIMESTAMPDIFF(interval,datetime_expr1,datetime_expr2)
说明

按照整数返回date 或者datetime 表达式datetime_expr1 和datetime_expr2 之间的差距,
参数由interval 选项给定;

合法的inteval 值与TIMESTAMPADD()函数描述相同。
示例
示例1
返回“2011-02-01”和“2011-05-01”之间相差的月份数。
gbase> SELECT TIMESTAMPDIFF(MONTH,'2011-02-01','2011-05-01') FROM t;
+------------------------------------------------+
| TIMESTAMPDIFF(MONTH,'2011-02-01','2011-05-01') |
+------------------------------------------------+
| 3 |
+------------------------------------------------+
1 row in set
示例2
返回“2011-05-01”和“2001-01-01”之间相差的年份数。
gbase> SELECT TIMESTAMPDIFF(YEAR,'2011-05-01','2001-01-01') FROM t;
+-----------------------------------------------+
| TIMESTAMPDIFF(YEAR,'2011-05-01','2001-01-01') |
+-----------------------------------------------+
| -10 |
+-----------------------------------------------+
1 row in set

TIME_FORMAT(time,format)
函数说明

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 527

此函数的作用类似DATE_FORMAT()函数,
但是format 字符串仅处理小时,

钟,秒等格式。其它的错误格式会产生一个NULL 值或者0;

如果time 值包含一个大于23 的小时部分,
%H 和%k 小时格式会产生一个大于
0~23 范围的值。其余小时格式产生的值都会用12 取模。
示例
示例1
“100:00:00”
包含一个大于23 的小时部分,
“%H”
和”
%k”
返回
“100”

“%h”

“%I”,“%l”格式产生的值为“100 MOD 12”。
gbase> SELECT TIME_FORMAT('100:00:00', '%H %k %h %I %l') FROM t;
+--------------------------------------------+
| TIME_FORMAT('100:00:00', '%H %k %h %I %l') |
+--------------------------------------------+
| 100 100 04 04 4 |
+--------------------------------------------+
1 row in set

TIME_TO_SEC(time)
函数说明
返回参数time 对应的秒数。
示例
示例1
返回“22:23:00”对应的秒数。
gbase> SELECT TIME_TO_SEC('22:23:00') FROM t;
+-------------------------+
| TIME_TO_SEC('22:23:00') |
+-------------------------+
| 80580 |
+-------------------------+
1 row in set
示例2
返回“00:39:38”对应的秒数。
gbase> SELECT TIME_TO_SEC('00:39:38') FROM t;

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 528
+-------------------------+
| TIME_TO_SEC('00:39:38') |
+-------------------------+
| 2378 |
+-------------------------+
1 row in set

TO_DATE(string,format)
函数说明
将字符串string 格式化成format 类型的日期。
表 5-128 参数说明
格式化参数
含 义
-
,
.
:
/
空格
一般作为参数string 的分隔符号使用,不论使用何种分隔符号,格式化输
出的格式都是以“-”作为分隔符的。因为GBase
UP 的日期格式就是ISO 的
格式。
注意:string 和format 两个参数必须使用一致的分隔符。
YYYY/YY
YYYY 对应1~4 位数字,YY 对应1~2 位数字。
注意:YYYY 或YY 的值不能为空。

如果FORMAT参数没有指定YYYY或者YY,
默认为本年,
与NOW()返回
的年一致。

如果string和format都是“YY-MM-DD”格式,则返回结果,年补
足4位,年的前两位是NOW()函数中年的前2位数值。

如果string是“YY-MM-DD”格式,而format是“YYYY-MM-DD”格
式,则返回结果,年也补足4位,但是年的前两位是用“00”补足。

年的范围:0~9999。
MM
如果string 参数不包含月MM,
则format 参数默认返回NOW()函数中月对应
的数值。
DD
如果string 参数不包含日DD,则format 参数默认返回为1 日。
DDD
一年中的第N 天。
参数string 必须给定年和天数,
foramt 参数使用YYYY
DDD
的形式,系统便能计算出对应的日期。
HH、HH12、HH24 格式化小时。
如果string 参数中小时部分超过12,
则format 参数中的HH,
必须使用HH24,
否则会报错。
AM
上午的简写,按照上午的12 小时区间,格式化小时。
注意:不要使用HH12 或者HH24 格式,
string 和format 两个参数必须同时指定AM 或者PM。
如果string 和format 两个参数指定的AM 或者PM 不一致,则以string 参
数指定的是AM 还是PM,进行格式化输出。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 529
格式化参数
含 义
PM
下午的简写,按照下午的12 小时区间,格式化小时。
注意:不要使用HH12 或者HH24 格式,
string 和format 两个参数必须同时指定AM 或者PM。
如果string 和format 两个参数指定的AM 或者PM 不一致,则以string 参
数指定的是AM 还是PM,进行格式化输出。
MI
分钟。
如果string 和foramt 参数中省略MI,则返回分钟为0。
SS
秒。
如果string 和foramt 参数中省略SS,则返回秒为0。
说明

UP 的TO_DATE('2011-11-15 02:15:10','YYYY-MM-DD HH12:MI:SS')各引
擎(UP 8a、UP oracle、UP hive)均返回具体的日期和时间2011-11-15
02:15:10 ,与单纯的hive 和oracle 数据库执行结果略有不同:

HIVE 数据库to_date 函数只支持一个参数且返回结果只有日期没有时间,UP
HIVE 引擎支持两个参数,
第二个参数为空时可保持与HIVE 数据库结果集一致:

gbase> SELECT TO_DATE('2011-11-15 02:15:10','') FROM test_hive.t;
-----------------------------------+
| TO_DATE('2011-11-15 02:15:10','') |
+-----------------------------------+
| 2011-11-15 |

ORACLE 数据库返回格式(15-NOV-11)与UP ORACLE 引擎返回格式
('2011-11-15 02:15:10')不一致,若需返回相同格式日期时间,则需在ORACLE
客户端执行语句:alter session set nls_date_format ="yyyy-mm-dd
hh24:mi:ss"
oracle:
SQL> alter session set nls_date_format ="yyyy-mm-dd hh24:mi:ss";
Session altered.
SQL> SELECT TO_DATE('2011-11-15 02:15:10','YYYY-MM-DD HH12:MI:SS')
FROM t_ora;
TO_DATE('2011-11-15
-------------------
2011-11-15 02:15:10

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 530

示例
示例1
不论string和format使用何种分隔符,格式化输出的格式都是以“-”作为分隔符。
gbase> SELECT TO_DATE('2011-11-15','YYYY-MM-DD') FROM t;
+------------------------------------+
| TO_DATE('2011-11-15','YYYY-MM-DD') |
+------------------------------------+
| 2011-11-15 |
+------------------------------------+
1 row in set

gbase> SELECT TO_DATE('2011/11/15','YYYY/MM/DD') FROM t;
+------------------------------------+
| TO_DATE('2011/11/15','YYYY/MM/DD') |
+------------------------------------+
| 2011-11-15 |
+------------------------------------+
1 row in set

gbase> SELECT TO_DATE('2011,11,15','YYYY,MM,DD') FROM t;
+------------------------------------+
| TO_DATE('2011,11,15','YYYY,MM,DD') |
+------------------------------------+
| 2011-11-15 |
+------------------------------------+
1 row in set

gbase> SELECT TO_DATE('2011:11:15','YYYY:MM:DD') FROM t;
+------------------------------------+
| TO_DATE('2011:11:15','YYYY:MM:DD') |
+------------------------------------+
| 2011-11-15 |
+------------------------------------+
1 row in set

gbase> SELECT TO_DATE('2011.11.15','YYYY.MM.DD') FROM t;
+------------------------------------+
| TO_DATE('2011.11.15','YYYY.MM.DD') |
+------------------------------------+
| 2011-11-15 |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 531
+------------------------------------+
1 row in set

gbase> SELECT TO_DATE('2011 11 14','YYYY MM DD') FROM t;
+------------------------------------+
| TO_DATE('2011 11 14','YYYY MM DD') |
+------------------------------------+
| 2011-11-14 |
+------------------------------------+
1 row in set

示例2

如果string 中没有指定年,则返回本年,与NOW()返回的年一致。
gbase> SELECT TO_DATE('11-15','MM-DD') FROM t;
+--------------------------+
| TO_DATE('11-15','MM-DD') |
+--------------------------+
| 2013-11-15 |
+--------------------------+
1 row in set

如果string 和format 都是“YY-MM-DD”格式,则返回结果中的“年”补足4
位。
gbase> SELECT TO_DATE('11-11-15','YY-MM-DD') FROM t;
+--------------------------------+
| TO_DATE('11-11-15','YY-MM-DD') |
+--------------------------------+
| 2011-11-15 |
+--------------------------------+
1 row in set


如果string 是“YY-MM-DD”格式,而format 是“YYYY-MM-DD”格式,返
回结果中的年补足4 位,但是年的前两位是用“00”补足。
gbase> SELECT TO_DATE('11-11-15','YYYY-MM-DD') FROM t;
+----------------------------------+
| TO_DATE('11-11-15','YYYY-MM-DD') |
+----------------------------------+
| 0011-11-15 |
+----------------------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 532
1 row in set
示例3
如果string参数不包含月MM,则format参数默认返回NOW()函数中月对应的数值。
gbase> SELECT TO_DATE('2011-11-15','YYYY-MM-DD') FROM t;
+------------------------------------+
| TO_DATE('2011-11-15','YYYY-MM-DD') |
+------------------------------------+
| 2011-11-15 |
+------------------------------------+
1 row in set

gbase> SELECT TO_DATE('2011-15','YYYY-DD') FROM t;
+------------------------------+
| TO_DATE('2011-15','YYYY-DD') |
+------------------------------+
| 2011-10-15 |
+------------------------------+
1 row in set
示例4
如果string参数不包含日DD,则format参数默认返回1。
gbase> SELECT TO_DATE('2011-11-15','YYYY-MM-DD') FROM t;
+------------------------------------+
| TO_DATE('2011-11-15','YYYY-MM-DD') |
+------------------------------------+
| 2011-11-15 |
+------------------------------------+
1 row in set

gbase> SELECT TO_DATE('2011-11','YYYY-MM') FROM t;
+------------------------------+
| TO_DATE('2011-11','YYYY-MM') |
+------------------------------+
| 2011-11-01 |
+------------------------------+
1 row in set
示例5
返回一年中的第N天对应的日期。
gbase> SELECT TO_DATE('2011 318','YYYY DDD') FROM t;
+---------------------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 533
| TO_DATE('2011 318','YYYY DDD') |
+---------------------------------+
| 2011-11-14 |
+---------------------------------+
1 row in set

gbase> SELECT TO_DATE('2010 55','YYYY DDD') FROM t;
+--------------------------------+
| TO_DATE('2010 55','YYYY DDD') |
+--------------------------------+
| 2010-02-24 |
+--------------------------------+
1 row in set

gbase> SELECT TO_DATE('2000 366','YYYY DDD') FROM t;
+--------------------------------+
| TO_DATE('2000 366','YYYY DDD') |
+--------------------------------+
| 2000-12-31 |
+--------------------------------+
1 row in set
示例6

返回12 小时制和24 小时制的时间。
gbase> SELECT TO_DATE('2011-11-15 12:15:10','YYYY-MM-DD HH:MI:SS') FROM t;
+------------------------------------------------------+
| TO_DATE('2011-11-15 12:15:10','YYYY-MM-DD HH:MI:SS') |
+------------------------------------------------------+
| 2011-11-15 12:15:10 |
+------------------------------------------------------+
1 row in set

gbase> SELECT TO_DATE('2011-11-15 12:15:10','YYYY-MM-DD HH12:MI:SS') FROM t;
+--------------------------------------------------------+
| TO_DATE('2011-11-15 12:15:10','YYYY-MM-DD HH12:MI:SS') |
+--------------------------------------------------------+
| 2011-11-15 12:15:10 |
+--------------------------------------------------------+
1 row in set

gbase> SELECT TO_DATE('2011-11-15 12:15:10','YYYY-MM-DD HH24:MI:SS') FROM t;
+--------------------------------------------------------+
| TO_DATE('2011-11-15 12:15:10','YYYY-MM-DD HH24:MI:SS') |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 534
+--------------------------------------------------------+
| 2011-11-15 12:15:10 |
+--------------------------------------------------------+
1 row in set

小时部分超过12,必须使用HH24,否则报错。
gbase> SELECT TO_DATE('2011-11-14 13:00:00','YYYY-MM-DD HH:MI:SS') FROM t;
ERROR 1709 (HY000): (GBA-02EX-0005) [IP:192.168.10.181; Port:5050]Failed to call API:
Query failed.
CAUSE:incorrect parameter in function to_date.
SQL: /* gc_sql_192.168.10.181_12_82_2013-02-28 22:08:59 */ SELECT to_date('2011-11-14
13:00:00', 'YYYY-MM-DD HH:MI:SS') AS `TO_DATE('2011-11-14 13:00:00','YYYY-MM-DD
HH:MI:SS')` FROM `test1`.t_n2 AS `test1.t`

小时部分超过12,使用HH24 后,顺利格式化输出。
gbase> SELECT TO_DATE('2011-11-14 13:00:00','YYYY-MM-DD HH24:MI:SS') FROM t;
+--------------------------------------------------------+
| TO_DATE('2011-11-14 13:00:00','YYYY-MM-DD HH24:MI:SS') |
+--------------------------------------------------------+
| 2011-11-14 13:00:00 |
+--------------------------------------------------------+
1 row in set


下面的示例,用来说明GBase UP 的TO_DATE()函数灵活性。
gbase> SELECT TO_DATE('2000 1111','YYYY MISS') FROM t;
+----------------------------------+
| TO_DATE('2000 1111','YYYY MISS') |
+----------------------------------+
| 2000-10-01 00:11:11 |
+----------------------------------+
1 row in set
示例7

string 和format 两个参数同时指定AM 或者PM。
gbase> SELECT TO_DATE('2011-11-15 8:15:20 AM','YYYY-MM-DD HH:MI:SS AM') FROM t;
+-----------------------------------------------------------+
| TO_DATE('2011-11-15 8:15:20 AM','YYYY-MM-DD HH:MI:SS AM') |
+-----------------------------------------------------------+
| 2011-11-15 08:15:20 |
+-----------------------------------------------------------+
1 row in set

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 535

gbase> SELECT TO_DATE('2011-11-15 8:15:20 PM','YYYY-MM-DD HH:MI:SS PM') FROM t;
+-----------------------------------------------------------+
| TO_DATE('2011-11-15 8:15:20 PM','YYYY-MM-DD HH:MI:SS PM') |
+-----------------------------------------------------------+
| 2011-11-15 20:15:20 |
+-----------------------------------------------------------+
1 row in set

如果string 和format 两个参数指定的AM 或者PM 不一致,则以string 参数指
定的是AM 还是PM,进行格式化输出。
gbase> SELECT TO_DATE('2011-11-15 8:15:20 AM','YYYY-MM-DD HH:MI:SS PM') FROM t;
+-----------------------------------------------------------+
| TO_DATE('2011-11-15 8:15:20 AM','YYYY-MM-DD HH:MI:SS PM') |
+-----------------------------------------------------------+
| 2011-11-15 08:15:20 |
+-----------------------------------------------------------+
1 row in set

gbase> SELECT TO_DATE('2011-11-15 8:15:20PM','YYYY-MM-DD HH:MI:SS AM') FROM t;
+---------------------------------------------------------+
| TO_DATE('2011-11-15 8:15:20PM','YYYY-MM-DD HH:MI:SS AM') |
+----------------------------------------------------------+
| 2011-11-15 20:15:20 |
+----------------------------------------------------------+
1 row in set
示例8

比较NOW()和TO_DATE(TO_CHAR(NOW(),'YYYY-MM-DD HH:MI:SS'),'YY
YY-MM-DD HH:MI:SS')。
gbase> SELECT NOW(),TO_DATE(TO_CHAR(NOW(),'YYYY-MM-DD HH:MI:SS'),'YYYY-MM-DD
HH:MI:SS') AS f_format FROM t;
+---------------------+---------------------+
| NOW() | f_format |
+---------------------+---------------------+
| 2013-10-12 13:56:45 | 2013-10-12 01:56:45 |
+---------------------+---------------------+
1 row in set

TO_CHAR()省略掉分钟。
gbase> SELECT NOW(),TO_DATE(TO_CHAR(NOW(),'YYYY-MM-DD HH:SS'),'YYYY-MM-DD
HH:SS') AS f_format FROM t;
+---------------------+---------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 536
| NOW() | f_format |
+---------------------+---------------------+
| 2013-10-12 13:57:06 | 2013-10-12 01:00:06 |
+---------------------+---------------------+
1 row in set
示例9

比较NOW()和TO_DATE(TO_CHAR(NOW(),'YYYY-MM-DD HH:MI:SS'),'YY
YY-MM-DD HH:MI:SS')。
gbase> SELECT NOW(),TO_DATE(TO_CHAR(NOW(),'YYYY-MM-DD HH:MI:SS'),'YYYY-MM-DD
HH:MI:SS') AS f_format FROM t;
+---------------------+---------------------+
| NOW() | f_format |
+---------------------+---------------------+
| 2013-10-12 13:57:37 | 2013-10-12 01:57:37 |
+---------------------+---------------------+
1 row in set

TO_CHAR()省略掉秒。
gbase> SELECT NOW(),TO_DATE(TO_CHAR(NOW(),'YYYY-MM-DD HH:MI'),'YYYY-MM-DD
HH:MI') AS f_format FROM t;
+---------------------+---------------------+
| NOW() | f_format |
+---------------------+---------------------+
| 2013-10-12 13:57:52 | 2013-10-12 01:57:00 |
+---------------------+---------------------+
1 row in set

TO_DAYS(date)
函数说明
返回日期date对应的天数(从年份0开始的天数)。
示例
示例1
返回“950501”对应的天数。
gbase> SELECT TO_DAYS(950501) FROM t;
+-----------------+
| TO_DAYS(950501) |

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 537
+-----------------+
| 728779 |
+-----------------+
1 row in set
示例2
返回“2010-08-30”对应的天数。
gbase> SELECT TO_DAYS('2010-08-30') FROM t;
+-----------------------+
| TO_DAYS('2010-08-30') |
+-----------------------+
| 734379 |
+-----------------------+
1 row in set
说明

TO_DAYS()不用于阳历出现(1582)前的值,原因是当日历改变时,遗失的日期不会被
考虑在内;

GBase UP 使用日期和时间类型中的规则转化两位日期中的年值到四位。
示例3
“2011-08-30”和“11-08-30”表示同一个日期。
gbase> SELECT TO_DAYS('2011-08-30'), TO_DAYS('11-08-30') FROM t;
+-----------------------+---------------------+
| TO_DAYS('2011-08-30') | TO_DAYS('11-08-30') |
+-----------------------+---------------------+
| 734744 | 734744 |
+-----------------------+---------------------+
1 row in set

示例4
对于1582 年之前的日期(或许在其它地区为下一年),结果是不可靠的。
gbase> SELECT TO_DAYS('1581-08-30') FROM t;
+-----------------------+
| TO_DAYS('1581-08-30') |
+-----------------------+
| 577690 |
+-----------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 538
1 row in set

TRUNC(date/datetime[, format])
函数说明
TRUNC函数返回以指定元素格式截去一部分的日期值。
说明

date/datetime 为必选参数,表示输入的一个日期值;

format 为可选参数,表示日期格式,用以指定的元素格式来截去输入的日期值。如果
省略此参数,则由最近的日期截去。
表 5-129format 支持的类型如下表所示。
参 数
说 明
year
返回当年第一天
yyyy
返回当年第一天
month
返回当月第一天
mm
返回当月第一天
dd
返回当天的日期
hh
得到当天凌晨0 点0 分0 秒的日期
mi
得到当天凌晨0 点0 分0 秒的日期

示例
示例1
返回当年的第一天。
gbase> SELECT TRUNC(current_date,'year') FROM t;
+----------------------------+
| TRUNC(current_date,'year') |
+----------------------------+
| 2013-01-01 |
+----------------------------+
1 row in set
示例2
返回当年的第一天。
gbase> SELECT TRUNC(current_date,'yyyy') FROM t;

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 539
+----------------------------+
| TRUNC(current_date,'yyyy') |
+----------------------------+
| 2013-01-01 |
+----------------------------+
1 row in set
示例3
返回当月的第一天。
gbase> SELECT TRUNC(current_date,'mm') FROM t;
+--------------------------+
| TRUNC(current_date,'mm') |
+--------------------------+
| 2013-10-01 |
+--------------------------+
1 row in set
示例4
返回当天的日期。
gbase> SELECT TRUNC(current_date,'dd') FROM t;
+--------------------------+
| TRUNC(current_date,'dd') |
+--------------------------+
| 2013-10-12 |
+--------------------------+
1 row in set

示例5
得到当天凌晨0点0分0秒的日期。
gbase> SELECT TRUNC(current_date,'hh') FROM t;
+--------------------------+
| TRUNC(current_date,'hh') |
+--------------------------+
| 2013-10-12 00:00:00 |
+--------------------------+
1 row in set
示例6
得到当天凌晨0点0分0秒的日期。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 540
gbase> SELECT TRUNC(current_date,'mi') FROM t;
+--------------------------+
| TRUNC(current_date,'mi') |
+--------------------------+
| 2013-10-12 00:00:00 |
+--------------------------+
1 row in set

注意
Oracle 引擎的TRUNC 函数支持日期和数字类型
(同8a 的TRUNCATE 函数)

的截断,因此第一个参数要么为日期类型,如果是字符串,则被认为是数字
类型,要能够转换成数字。例如:
TRUNC(TO_DATE(‘2017-08-30’, ‘YYYY-MM-DD’), ‘year’)
TRUNC(1232.23454, 2)同8a 的TRUNCATE 函数

UNIX_TIMESTAMP
函数说明
UNIX_TIMESTAMP(),UNIX_TIMESTAMP(date)
说明

如果调用时没有参数,以无符号的整数形式返回一个Unix 时间戳(从“1970-01-01
00:00:00” GMT 开始的秒数);

如果以一个参数date 调用UNIX_TIMESTAMP(),它将返回该参数值从“1970-01-01
00:00:00” GMT 开始经过的秒数值;

date 可以是一个DATE 字符串,一个DATETIME 字符串,一个TIMESTAMP,以一
个YYMMDD 或YYYYMMDD 显示的本地时间。
示例
示例1
UNIX_TIMESTAMP()没有参数,以无符号的整数形式返回一个Unix时间戳。

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 541
gbase> SELECT UNIX_TIMESTAMP() FROM t;
+------------------+
| UNIX_TIMESTAMP() |
+------------------+
| 1381557673 |
+------------------+
1 row in set
示例2
UNIX_TIMESTAMP(date),
返回从
“1970-01-01 00:00:00”
GMT开始,

“2011-08-30
22:23:00”所经过的秒数值。
gbase> SELECT UNIX_TIMESTAMP('2011-08-30 22:23:00') FROM t;
+---------------------------------------+
| UNIX_TIMESTAMP('2011-08-30 22:23:00') |
+---------------------------------------+
| 1314714180 |
+---------------------------------------+
1 row in set
说明

当UNIX_TIMESTAMP 被用在TIMESTAMP 列时,函数直接返回内部时间戳值,而不
进行任何隐含的“string-to-Unix-timestamp”转化。如果向UNIX_TIMESTAMP()传递
一个溢出日期,它会返回0,但请注意只执行基本范围检查(年份从1970 到2037,月份
从01 到12,日期从01 到31);

如果用户希望减去UNIX_TIMESTAMP()列,需要将结果强制转换为一个有符号整数。


UTC_DATE,UTC_DATE()
函数说明
按照“YYYY-MM-DD”格式返回UTC日期,返回值的形式取决于该函数使用于字
符串还是数字上下文。
示例
示例1
以“YYYY-MM-DD”格式返回UTC日期。
gbase> SELECT UTC_DATE(), UTC_DATE() + 2 FROM t;
+------------+----------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 542
| UTC_DATE() | UTC_DATE() + 0 |
+------------+----------------+
| 2013-10-12 | 2013-10-14 |
+------------+----------------+
1 row in set

UTC_TIME,UTC_TIME()
函数说明
按照
“HH:MI:SS”
格式返回当前的UTC时间,
返回值的形式取决于该函数使用于字
符串还是数字上下文。
示例
示例1
以“HH:MI:SS”格式返回UTC时间。
gbase> SELECT UTC_TIME(), UTC_TIME() + 0 FROM t;
+------------+----------------+
| UTC_TIME() | UTC_TIME() + 0 |
+------------+----------------+
| 06:02:18 | NULL |
+------------+----------------+
1 row in set

UTC_TIMESTAMP,UTC_TIMESTAMP()
函数说明
按照“YYYY-MM-DD HH:MI:SS”格式返回UTC日期,返回值的形式取决于该函
数使用于字符串还是数字上下文。
示例
示例1
以“YYYY-MM-DD HH:MI:SS”格式返回UTC“日期+时间”。
gbase> SELECT UTC_TIMESTAMP(), UTC_TIMESTAMP() + 2 FROM t;
+---------------------+-----------------------+
| UTC_TIMESTAMP() | UTC_TIMESTAMP() + 0 |
+---------------------+-----------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 543
| 2013-10-12 06:02:44 | 2013-10-14 06:02:44 |
+---------------------+-----------------------+
1 row in set

WEEK(date[,mode])
函数说明

该函数返回日期的星期数。

两个参数形式的WEEK()允许用户指定周是否以星期日或星期一开始,以及返
回值为0~53 还是1~53。

如果忽略了mode 参数,则使用系统变量default_week_format 的值。

可以使用SHOW VARIABLES LIKE '%default_week_format%';命令查看defaul
t_week_format 的默认值。

下面的表显示了mode 参数怎样工作:
表 5-130 参数说明
模式
周的起始天
范围
一周是第一周……
0
Sunday
0~53
一周以星期日开始
1
Monday
0~53
这种模式多用了3 天
2
Sunday
1~53
一周以星期日开始
3
Monday
1~53
这种模式多用了3 天
4
Sunday
0~53
这种模式多用了3 天
5
Monday
0~53
一周以星期一开始
6
Sunday
1~53
这种模式多用了3 天
7
Monday
1~53
一周以星期一开始
示例
示例1
返回“2010-08-31”对应的2010年中第几周。
gbase> SELECT WEEK('2010-08-31') FROM t;
+--------------------+
| WEEK('2010-08-31') |
+--------------------+
| 35 |
+--------------------+
1 row in set

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 544
示例2
返回“2011-08-30”对应的2011年中第几周,模式为“0”。
gbase> SELECT WEEK('2011-08-30',0) FROM t;
+----------------------+
| WEEK('2011-08-30',0) |
+----------------------+
| 35 |
+----------------------+
1 row in set
示例3
返回“2011-08-30”对应的2011年中第几周,模式为“1”。
gbase> SELECT WEEK('2011-08-30',1) FROM t;
+----------------------+
| WEEK('2011-08-30',1) |
+----------------------+
| 35 |
+----------------------+
1 row in set
示例4
返回“2011-12-31”对应的2011年中第几周,模式为“1”。
gbase> SELECT WEEK('2011-12-31',1) FROM t;
+----------------------+
| WEEK('2011-12-31',1) |
+----------------------+
| 52 |
+----------------------+
1 row in set
示例5
如果一周是上一年的最后一周,不使用可选模式2,3,6,或7,则函数WEEK()返
回0。
gbase> SELECT YEAR('2011-01-01'), WEEK('2011-01-01',0) FROM t;
+--------------------+----------------------+
| YEAR('2011-01-01') | WEEK('2011-01-01',0) |
+--------------------+----------------------+
| 2011 | 0 |
+--------------------+----------------------+
1 row in set

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 545
示例6
返回“2011-01-01”对应的2011年中第几周,模式为“2”。
gbase> SELECT YEAR('2011-01-01'), WEEK('2011-01-01',2) FROM t;
+--------------------+----------------------+
| YEAR('2011-01-01') | WEEK('2011-01-01',2) |
+--------------------+----------------------+
| 2011 | 52 |
+--------------------+----------------------+
1 row in set
示例7
返回“2011-01-01”对应的2011年中第几周,模式为“3”。
gbase> SELECT YEAR('2011-01-01'), WEEK('2011-01-01',3) FROM t;
+--------------------+----------------------+
| YEAR('2011-01-01') | WEEK('2011-01-01',3) |
+--------------------+----------------------+
| 2011 | 52 |
+--------------------+----------------------+
1 row in set
示例8
返回“2011-01-01”对应的2011年中第几周,模式为“6”。
gbase> SELECT YEAR('2011-01-01'), WEEK('2011-01-01',6) FROM t;
+--------------------+----------------------+
| YEAR('2011-01-01') | WEEK('2011-01-01',6) |
+--------------------+----------------------+
| 2011 | 52 |
+--------------------+----------------------+
1 row in set
示例9
返回“2000-01-01”对应的2000年中第几周,模式为“0”。
gbase> SELECT YEAR('2000-01-01'), WEEK('2000-01-01',0) FROM t;
+--------------------+----------------------+
| YEAR('2000-01-01') | WEEK('2000-01-01',0) |
+--------------------+----------------------+
| 2000 | 0 |
+--------------------+----------------------+
1 row in set
说明

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 546

用户可能会提出意见,认为GBase UP 对于WEEK()函数应该返回“52”,原因是给定
的日期实际上发生在1999 年的第52 周。我们决定返回“0”作为代替的原因,是希望
该函数能返回“给定年份的星期数”。这使得WEEK()函数在同其它从日期中抽取日
期部分的函数结合时的使用更加可靠;

假如希望所计算的关于年份的结果包括给定日期所在周的第一天,则应使用0、2、5
或7 作为mode 参数选择。
示例10
返回“2011-01-01”对应的2011年中第几周,模式为“2”。
gbase> SELECT WEEK('2011-01-01',2) FROM t;
+----------------------+
| WEEK('2011-01-01',2) |
+----------------------+
| 52 |
+----------------------+
1 row in set
示例11
使用YEARWEEK()函数。
gbase> SELECT YEARWEEK('2011-01-01') FROM t;
+------------------------+
| YEARWEEK('2011-01-01') |
+------------------------+
| 201052 |
+------------------------+
1 row in set
示例12
使用MID函数,从“YEARWEEK('2011-01-01')”返回值中从第一个字符开始,连续
提取2个。
gbase> SELECT MID(YEARWEEK('2011-01-01'),5,2) FROM t;
+---------------------------------+
| MID(YEARWEEK('2011-01-01'),5,2) |
+---------------------------------+
| 52 |
+---------------------------------+
1 row in set

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 547

WEEKDAY(date)
函数说明
返回date对应的星期索引(0=Monday,1=Tuesday,...6=Sunday)。
示例
示例1
返回“2011-08-29 22:23:00”对应的是星期几。
gbase> SELECT WEEKDAY('2011-08-29 22:23:00') FROM t;
+--------------------------------+
| WEEKDAY('2011-08-29 22:23:00') |
+--------------------------------+
| 0 |
+--------------------------------+
1 row in set
示例2
返回“2010-08-05”对应的是星期几。
gbase> SELECT WEEKDAY('2010-08-05') FROM t;
+-----------------------+
| WEEKDAY('2010-08-05') |
+-----------------------+
| 3 |
+-----------------------+
1 row in set

WEEKOFYEAR(date)
函数说明

返回date 的周数;

date 的取值范围为1~53;

WEEKOFYEAR(date)等价于WEEK(date,3)。
示例

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 548
示例1
返回“2010-08-30”对应的是2010年的第几周。
gbase> SELECT WEEKOFYEAR('2010-08-30') FROM t;
+--------------------------+
| WEEKOFYEAR('2010-08-30') |
+--------------------------+
| 35 |
+--------------------------+
1 row in set

YEAR(date)
函数说明
返回日期date对应的年份值。
示例
示例1
返回“2011-02-03”对应的年份。
gbase> SELECT YEAR('2011-02-03') FROM t;
+--------------------+
| YEAR('2011-02-03') |
+--------------------+
| 2011 |
+--------------------+
1 row in set

YEARWEEK(date),YEARWEEK(date,start)
函数说明

返回日期date 对应的年和周;

YEARWEEK(date,start)中的参数start,形式和作用与WEEK()中mode 参数相
同。
示例
示例1

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 549
返回“2011-02-01”对应的年和周,模式为0。
gbase> SELECT YEARWEEK('2011-02-01',0) FROM t;
+--------------------------+
| YEARWEEK('2011-02-01',0) |
+--------------------------+
| 201105 |
+--------------------------+
1 row in set
示例2

当日期参数date 是一年的第一周或最后一周时,
返回的年份值可能与日期参数
给出的年份不一致。
gbase> SELECT YEARWEEK('2011-01-01') FROM t;
+------------------------+
| YEARWEEK('2011-01-01') |
+------------------------+
| 201052 |
+------------------------+
1 row in set

当YEARWEEK()函数的参数start 的值为0 或1 时,
周值的返回值不同于WEE
K()函数的返回值(0),WEEK()是根据给定的年返回周值。
gbase> SELECT YEARWEEK('2011-01-01',0),WEEK('2011-01-01',0) FROM t;
+--------------------------+----------------------+
| YEARWEEK('2011-01-01',0) | WEEK('2011-01-01',0) |
+--------------------------+----------------------+
| 201052 | 0 |
+--------------------------+----------------------+
1 row in set

gbase> SELECT YEARWEEK('2011-01-01',1),WEEK('2011-01-01',1) FROM t;
+--------------------------+----------------------+
| YEARWEEK('2011-01-01',1) | WEEK('2011-01-01',1) |
+--------------------------+----------------------+
| 201052 | 0 |
+--------------------------+----------------------+
1 row in set

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 550
其它函数
位函数
GBase UP 使用BIGINT(64 位)算法进行位运算,所以这些操作符最大范围是64
位。
注意
位函数运算只支持数值类型。