返回首页

gbase数据、南大通用产品文档:GBase8aDATE(expr)

更新日期:2024年09月11日

函数说明

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

如果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 |
+-----------------------------+

GBase UP 产品手册 5 数据库管理指南
文档版本04(2021-04-21) 南大通用数据技术股份有限公司 855
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

......................................
- 730 -

dtsub() 函数从另一 datetime 值减去一个 datetime 值。结果为 interval 值。
语法
mint dtsub(d1, d2, inv)
dtime_t *d1, *d2;
intrvl_t *inv;
d1
指向初始化了的 datetime 主变量的指针。

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 685 -

d2
指向初始化了的 datetime 主变量的指针。
inv
指向包含结果的 interval 主变量的指针。

用法
dtsub() 函数从 d1 减去 datetime 值 d2,并将 interval 结果存储在 inv 中。该结果
可为正值或负值。如果必要,在减法之前,该函数扩展 d2 来匹配 d1 的限定符。

以 year to month 或 day to fraction(5) 类中的一个值来初始化 inv 的限定符。当 d1
包含 day to fraction 类中的字段时,interval 限定符还必须在 day to fraction 类中。

返回代码
0
减法成功。
<0
在执行减法时,发生错误。

示例

demo 目录在文件 dtsub.ec 中包含此样例程序。该程序执行 datetime 减法,返回在
year to month 与 month to month 的范围中的等同的 interval 结果,并尝试返回在 day
to hour 的范围中的 interval 结果。
/*
* dtsub.ec *

The following program subtracts one DATETIME value from another and displays the
resulting INTERVAL value or an error message.
*/

#include

EXEC SQL include datetime;

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 686 -


main()
{
mint x;
char out_str[16];

EXEC SQL BEGIN DECLARE SECTION;
datetime year to month dt_var1, dt_var2;
interval year to month i_ytm;
interval month to month i_mtm;
interval day to hour i_dth;
EXEC SQL END DECLARE SECTION;


printf("DTSUB Sample ESQL Program running.\n\n");

printf("Datetime (year to month) value #1 = 2007-10\n");
dtcvasc("2007-10", &dt_var1);
printf("Datetime (year to month) value #2 = 2001-08\n");
dtcvasc("2001-08", &dt_var2);

printf("------------------------------------\n");

/* Determine year-to-month difference */
printf("Difference (year to month) = ");
if(x = dtsub(&dt_var1, &dt_var2, &i_ytm))
printf("Error from dtsub(): %d\n", x);
else
{
/* Convert to ASCII for displaying */
intoasc(&i_ytm, out_str);
printf("%s\n", out_str);
}

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 687 -


/* Determine month-to-month difference */
printf("Difference (month to month) = ");
if(x = dtsub(&dt_var1, &dt_var2, &i_mtm))
printf("Error from dtsub(): %d\n", x);
else
{
/* Convert to ASCII for displaying */
intoasc(&i_mtm, out_str);
printf("%s\n", out_str);
}

/* Determine day-to-hour difference: Error - Can't convert year-to-month to
day-to-hour
*/
printf("Difference (day to hour) = ");
if(x = dtsub(&dt_var1, &dt_var2, &i_dth))
printf("Error from dtsub(): %d\n", x);
else
{
/* Convert to ASCII for displaying */
intoasc(&i_dth, out_str);
printf("%s\n", out_str);
}

printf("\nDTSUB Sample Program over.\n\n");
}

输出
DTSUB Sample ESQL Program running.

Datetime (year to month) value #1 = 2007-10
Datetime (year to month) value #2 = 2001-08

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 688 -

-------------------------------------------
Difference (year to month) = 0006-02
Difference (month to month) = 86
Difference (day to hour) = Error from dtsub(): -1266

DTSUB Sample Program over.