返回首页

gbase数据、南大通用产品文档:GBase8sDBTIME 环境变量

更新日期:2024年09月11日

DBTIME 环境变量对 DATETIME 值的显示和数据输入格式指定格式编排掩码。 只有在
DBTIME 要格式化的 DATETIME 数据值具有与指定的 DBTIME 设置相同精度的情况下,
DBTIME 环境变量才有用。对于用不同 DATETIME 限定符声明的 DATETIME 值,您可能会
遇到意外或无效的显示格式。

literal 是文字空格或任何可打印字符。
Min 是一个文字整数,设置 special 指定的值的子串中的最小字符数。
Precision 是任何时间单位的值的位数或月份名中的最大字符数。
Special 为以下列示的占位符之一。
这些术语和符号在接下来的几页中作了描述。
这个引号括起来的字符串可以包括字面的字符以及 DATETIME 值的个别时间单位和
其他元素值的占位符。DBTIME 仅在您调用某些 GBase 8s ESQL/C DATETIME 例程时
起作用。(有关详细信息,请参阅 GBase 8s ESQL/C 程序员手册。)如果未设置
DBTIME,那么表示未定义这些例程的行为,且“YYYY-MM-DD hh:mm:ss.fffff”是
缺省语言环境中的 DATETIME YEAR TO FRACTION(5) 文字值的缺省显示和输入格式。
百分比 ( % ) 符号给予后跟的 special 占位符很特殊的意义。如果没有前导 % 符
号,格式化掩码内的任何字符都被解释为文字字符,即使它与以下列表中的占位符字符之
一是相同字符。此外还需注意 special 占位符符号是区分大小写的。
DBTIME 格式字符串内的下列字符是 DATETIME 值内的时间单位(或其他功能)
的占位符。
%b
由缩写月份名替换。
%B
由完整月份名替换。
%d
由十进制数形式的月份中的一天 [01,31] 替换。
%Fn
由带有整数 n 指定的小数位的秒的小数替换。n 的缺省值为 2;n 的范围为 0 ≤ n
≤ 5。
%H

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 164 -
由小时(24 小时时钟)替换。
%I
由小时(12 小时时钟)替换。
%M
由十进制数形式的分钟 [00,59] 替换。
%m
由十进制数形式的月份 [01,12] 替换。
%p
由 A.M. 或 P.M.(或语言环境文件中的等效值)替换。
%S
由十进制数形式的秒 [00,59] 替换。
%y
由四位十进制数的年份替换。
%Y
由四位十进制数的年份替换。用户必须输入四位值。
%%
替换为 %(以允许格式字符串中出现 %)。
例如,考虑 DATETIME YEAR TO SECOND 的以下显示格式:
Mar 21, 2001 at 16 h 30 m 28 s
如果用户输入两位年份值,那么此值根据 DBCENTURY 环境变量设置展开为 4
位。如果未设置 DBCENTURY,那么在缺省情况下使用字符串 19 作为头两位。
按以下命令行(用于 C shell)所示设置 DBTIME:
setenv DBTIME '%b %d, %Y at %H h %M m %S s'
缺省 DBTIME 生成以下 ANSI SQL 字符串格式:
2001-03-21 16:30:28
可按以下示例所示设置缺省 DBTIME:
setenv DBTIME '%Y-%m-%d %H:%M:%S'
可选字段宽度和精度规范 (w.p) 可直接跟在百分比 (%) 字符之后。它解释为如下所
示:
w
指定最小字段宽度。该值是右对齐的,左边填充空格。
-w
指定最小字段宽度。该值是左对齐的,右边填充空格。
0w
指定最小字段宽度。该值是靠右对齐的,并在左侧使用零填充。

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 165 -
p
指定d、H、I、m、M、S、y 和 Y 时间单位值的精度或 b 和 B 月份名中的最大字
符数。
下列限制适用于字段宽度和精度规范:
如果数据值提供的位数少于 precision 指定的位数,那么使用前导零填充该值。
如果数据值提供的字符数超过 precision 指定的字符数,那么从右边截断超出的
字符。
如果没有为 d、H、I、m、M、S 或 y 占位符指定字段宽度或精度,那么缺省值
为 0.2 或 0.4(对于 Y 占位符)。
仅当将 DATETIME 值转换为 ASCII 字符串时,precision 规范才有意义,但反
过来却不是这样。
F 占位符不支持此文件宽度和精度语法。
与 DBDATE、GL_DATE 或 GL_DATETIME 一样,DBTIME 设置仅控制数据值
的字符串表示;它不能更改 DATETIME 列的内部存储格式。(有关确定 DATE 值的格
式的信息,请参阅 DBDATE 环境变量页中对 DBDATE 的讨论。)
在支持基于纪元的日期的东亚语言环境中,DBTIME 还可指定日本或台湾纪元。请
参阅《GBase 8s GLS 用户指南》以获取有关设置 DBTIME 以显示基于纪元的
DATETIME 值的更多占位符符号的详细信息以及对 GL_DATETIME 和 GL_DATE 环
境变量的描述。

当您将带有 SQL 数据类型的值转换为字符数据类型时,rtypwidth() 函数返回字符数
据类型需要避免截断的最小字符数。


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

语法
mint rtypwidth(sqltype, sqllen)
mint sqltype;
mint sqllen;

sqltype
SQL 数据类型的整数代码。
sqllen
对于指定的 SQL 数据类型,在数据文件中的字节数。

用法

随同 DESCRIBE 语句初始化的 sqlda,提供 rtypwidth() 函数来使用。sqltype 和
sqllen 组件对应于每一 sqlda.sqlvar 结构中同名的组件。

返回代码
0
sqltype 不是有效的 SQL 数据类型。
>0
返回值是 sqltype 数据类型要求的最小字符数。

示例

此样例程序在 demo 目录中的 rtypwidth.ec 文件中。
/*
* rtypwidth.ec *

This program displays the name of each column in the 'orders' table and the number of
characters required to store the column when the data type is converted to characters.
*/

#include


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

#define WARNNOTIFY 1
#define NOWARNNOTIFY 0

main(argc, argv)
int argc;
char *argv[];
{
mint i, numchars;

int4 exp_chk();
char db_stmnt[50];
struct sqlda *sql_desc;
struct sqlvar_struct *col;

EXEC SQL BEGIN DECLARE SECTION;
char db_name[20];
EXEC SQL END DECLARE SECTION;

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

if (argc > 2) /* correct no. of args? */
{
printf("\nUsage: %s [database]\nIncorrect no. of argument(s)\n",argv[0]);
exit(1);
}
strcpy(db_name, "stores7");
if (argc == 2)
strcpy(db_name, argv[1]);

EXEC SQL connect to :db_name;
sprintf(db_stmnt, "CONNECT TO %s", argv[1]);
exp_chk(db_stmnt, NOWARNNOTIFY);


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

printf("Connected to %s\n", db_name);
EXEC SQL prepare query_1 from 'select * from orders';
/* prepare select */
if(exp_chk("Prepare", WARNNOTIFY) == 1)
exit(1);
EXEC SQL describe query_1 into sql_desc;
/* setup sqlda */
if(exp_chk("Describe", WARNNOTIFY) == 1)
exit(1);
printf("\n\tColumn Name \t# chars\n");

/*
* For each column in orders print the column name and the minimum number of
characters required to convert the SQL type to a character data type
*/
for (i = 0, col = sql_desc->sqlvar; i < sql_desc->sqld; i++, col++)
{
numchars = rtypwidth(col->sqltype, col->sqllen);
printf("\t%-15s\t%d\n", col->sqlname, numchars);
}

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

/*
The exp_chk() file contains the exception handling functions to
heck the SQLSTATE status variable to see if an error has occurred following an SQL
statement. If a warning or an error has occurred, exp_chk() executes the GET DIAGNOSTICS
statement and prints the detail for each exception that is returned.
*/
EXEC SQL include exp_chk.ec
输出

RTYPWIDTH Sample ESQL Program running.

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


Connected to stores7

Column Name # chars
order_num 11
order_date 10
customer_num 11
ship_instruct 40
backlog 1
po_num 10
ship_date 10
ship_weight 10
ship_charge 9
paid_date 10

RTYPWIDTH Sample Program over.

使用“导入txt”功能,您可以将txt 文件数据导入到数据库中。
在“数据库导航”中,选择数据库标签下的数据库节点。该节点必须是当前连
接数据库节点。右键单击选择“导入数据库数据”,在弹出界面中点击“打开
文件”
,如下图所示

GBaseDataStudio 管理工具手册
- 162 -
南大通用数据技术股份有限公司
图5- 515 导入txt
选择文件类型txt
图5- 516 选择txt 文件

GBaseDataStudio 管理工具手册
南大通用数据技术股份有限公司
- 163 -
读取txt 文件后,
“来自文本文件的数据”tab 页显示如下内容
文件数据:从txt 文件中读取的原始数据
包围符:选填,数据的包围符号
分隔符:选填,数据之间的分隔符号
换行符:必须输入,目前换行符多为\n 或者为\r\n,也可以自定义
字段数:展示导入的字段数
行数:控制导入文件的行数
标题名:控制文件第一行是否是需要导入的数据
字符集:文件的字符集,选择完字符集后,需要重新点击“打开文件”
,选择文

预览:预览数据的内容
导入:开始导入按钮
“来自文本文件的数据”tab 如下面界面所示
图5- 517 来自文本文件的数据
读取txt 文件后,
“到数据库的数据”tab 页显示如下内容:
虚拟集群:选择导入的虚拟集群
数据库:选择导入的数据库
表:选择需要导入的表
(左边)字段:txt 文件中的字段

GBaseDataStudio 管理工具手册
- 164 -
南大通用数据技术股份有限公司
字段:数据库中的表字段
字段类型:自动匹配类型,不需要选择
日期格式:字段类型是Date 时,必须选择
“到数据库的数据”tab 页如下所示
图5- 518 到数据库的数据