pgtypes 库将 PostgreSQL 数据库类型映射到 C 语言中可用的等效类型。它还提供了一些函数,用于在 C 语言中对这些类型进行基本计算,即无需 PostgreSQL 服务器的帮助。请参阅以下示例
EXEC SQL BEGIN DECLARE SECTION;
date date1;
timestamp ts1, tsout;
interval iv1;
char *out;
EXEC SQL END DECLARE SECTION;
PGTYPESdate_today(&date1);
EXEC SQL SELECT started, duration INTO :ts1, :iv1 FROM datetbl WHERE d=:date1;
PGTYPEStimestamp_add_interval(&ts1, &iv1, &tsout);
out = PGTYPEStimestamp_to_asc(&tsout);
printf("Started + duration: %s\n", out);
PGTYPESchar_free(out);
某些函数(例如 PGTYPESnumeric_to_asc)会返回一个新分配的字符字符串指针。这些结果应使用 PGTYPESchar_free 而不是 free 来释放。(这仅在 Windows 上很重要,因为在 Windows 上,内存分配和释放有时需要由同一库完成)。
numeric 类型允许进行任意精度的计算。有关 PostgreSQL 服务器中等效类型的信息,请参阅 第 8.1 节。由于其任意精度,此变量需要能够动态扩展和收缩。因此,您只能通过 PGTYPESnumeric_new 和 PGTYPESnumeric_free 函数在堆上创建 numeric 变量。decimal 类型虽然相似但精度有限,可以创建在栈上或堆上。
可以使用以下函数处理 numeric 类型
PGTYPESnumeric_new #请求一个新分配的 numeric 变量的指针。
numeric *PGTYPESnumeric_new(void);
PGTYPESnumeric_free #释放一个 numeric 类型,回收其所有内存。
void PGTYPESnumeric_free(numeric *var);
PGTYPESnumeric_from_asc #从其字符串表示形式解析一个 numeric 类型。
numeric *PGTYPESnumeric_from_asc(char *str, char **endptr);
有效的格式例如有:-2、.794、+3.44、592.49E07 或 -32.84e-4。如果值能够成功解析,则返回一个有效指针,否则返回 NULL 指针。目前 ECPG 总是解析整个字符串,因此它目前不支持将第一个无效字符的地址存储在 *endptr 中。您可以安全地将 endptr 设置为 NULL。
PGTYPESnumeric_to_asc #返回一个由 malloc 分配的字符串的指针,该字符串包含 numeric 类型 num 的字符串表示形式。
char *PGTYPESnumeric_to_asc(numeric *num, int dscale);
numeric 值将打印 dscale 位小数,必要时会进行四舍五入。结果必须使用 PGTYPESchar_free() 释放。
PGTYPESnumeric_add #将两个 numeric 变量相加并将结果存储在第三个变量中。
int PGTYPESnumeric_add(numeric *var1, numeric *var2, numeric *result);
该函数将变量 var1 和 var2 相加并将结果存储在 result 变量中。函数成功时返回 0,出错时返回 -1。
PGTYPESnumeric_sub #从一个 numeric 变量减去另一个 numeric 变量,并将结果存储在第三个变量中。
int PGTYPESnumeric_sub(numeric *var1, numeric *var2, numeric *result);
该函数将变量 var2 从变量 var1 中减去。操作结果存储在 result 变量中。函数成功时返回 0,出错时返回 -1。
PGTYPESnumeric_mul #将两个 numeric 变量相乘并将结果存储在第三个变量中。
int PGTYPESnumeric_mul(numeric *var1, numeric *var2, numeric *result);
该函数将变量 var1 和 var2 相乘。操作结果存储在 result 变量中。函数成功时返回 0,出错时返回 -1。
PGTYPESnumeric_div #将两个 numeric 变量相除并将结果存储在第三个变量中。
int PGTYPESnumeric_div(numeric *var1, numeric *var2, numeric *result);
该函数将变量 var1 除以 var2。操作结果存储在 result 变量中。函数成功时返回 0,出错时返回 -1。
PGTYPESnumeric_cmp #比较两个 numeric 变量。
int PGTYPESnumeric_cmp(numeric *var1, numeric *var2)
此函数比较两个 numeric 变量。出错时返回 INT_MAX。成功时,函数返回以下三个可能结果之一:
1,如果 var1 大于 var2
-1,如果 var1 小于 var2
0,如果 var1 和 var2 相等
PGTYPESnumeric_from_int #将一个 int 变量转换为 numeric 变量。
int PGTYPESnumeric_from_int(signed int int_val, numeric *var);
此函数接受一个 signed int 类型的变量,并将其存储在 numeric 变量 var 中。成功时返回 0,失败时返回 -1。
PGTYPESnumeric_from_long #将一个 long int 变量转换为 numeric 变量。
int PGTYPESnumeric_from_long(signed long int long_val, numeric *var);
此函数接受一个 signed long int 类型的变量,并将其存储在 numeric 变量 var 中。成功时返回 0,失败时返回 -1。
PGTYPESnumeric_copy #将一个 numeric 变量复制到另一个变量。
int PGTYPESnumeric_copy(numeric *src, numeric *dst);
此函数将 src 指向的变量的值复制到 dst 指向的变量中。成功时返回 0,出错时返回 -1。
PGTYPESnumeric_from_double #将一个 double 类型的变量转换为 numeric。
int PGTYPESnumeric_from_double(double d, numeric *dst);
此函数接受一个 double 类型的变量,并将结果存储在 dst 指向的变量中。成功时返回 0,出错时返回 -1。
PGTYPESnumeric_to_double #将一个 numeric 类型的变量转换为 double。
int PGTYPESnumeric_to_double(numeric *nv, double *dp)
该函数将 nv 指向的变量中的 numeric 值转换为 dp 指向的 double 变量。成功时返回 0,出错时返回 -1,包括溢出。溢出时,全局变量 errno 会额外设置为 PGTYPES_NUM_OVERFLOW。
PGTYPESnumeric_to_int #将一个 numeric 类型的变量转换为 int。
int PGTYPESnumeric_to_int(numeric *nv, int *ip);
该函数将 nv 指向的变量中的 numeric 值转换为 ip 指向的 integer 变量。成功时返回 0,出错时返回 -1,包括溢出。溢出时,全局变量 errno 会额外设置为 PGTYPES_NUM_OVERFLOW。
PGTYPESnumeric_to_long #将一个 numeric 类型的变量转换为 long。
int PGTYPESnumeric_to_long(numeric *nv, long *lp);
该函数将 nv 指向的变量中的 numeric 值转换为 lp 指向的 long integer 变量。成功时返回 0,出错时返回 -1,包括溢出和下溢。溢出时,全局变量 errno 会设置为 PGTYPES_NUM_OVERFLOW,下溢时 errno 会设置为 PGTYPES_NUM_UNDERFLOW。
PGTYPESnumeric_to_decimal #将一个 numeric 类型的变量转换为 decimal。
int PGTYPESnumeric_to_decimal(numeric *src, decimal *dst);
该函数将 src 指向的变量中的 numeric 值转换为 dst 指向的 decimal 变量。成功时返回 0,出错时返回 -1,包括溢出。溢出时,全局变量 errno 会额外设置为 PGTYPES_NUM_OVERFLOW。
PGTYPESnumeric_from_decimal #将一个 decimal 类型的变量转换为 numeric。
int PGTYPESnumeric_from_decimal(decimal *src, numeric *dst);
该函数将 src 指向的变量中的 decimal 值转换为 dst 指向的 numeric 变量。成功时返回 0,出错时返回 -1。由于 decimal 类型实现为 numeric 类型的受限版本,因此此转换不会发生溢出。
C 语言中的 date 类型使您的程序能够处理 SQL date 类型的数据。有关 PostgreSQL 服务器中等效类型的信息,请参阅 第 8.5 节。
可以使用以下函数处理 date 类型
PGTYPESdate_from_timestamp #从 timestamp 中提取日期部分。
date PGTYPESdate_from_timestamp(timestamp dt);
该函数接收 timestamp 作为其唯一参数,并返回从该 timestamp 中提取的日期部分。
PGTYPESdate_from_asc #从其文本表示形式解析一个 date。
date PGTYPESdate_from_asc(char *str, char **endptr);
该函数接收一个 C char* 字符串 str 和一个指向 C char* 字符串的指针 endptr。目前 ECPG 总是解析整个字符串,因此它目前不支持将第一个无效字符的地址存储在 *endptr 中。您可以安全地将 endptr 设置为 NULL。
请注意,该函数始终假定为 MDY 格式的日期,并且目前在 ECPG 中没有变量可以更改此行为。
表 34.2 显示了允许的输入格式。
表 34.2. PGTYPESdate_from_asc 的有效输入格式
| 输入 | 结果 |
|---|---|
January 8, 1999 |
January 8, 1999 |
1999-01-08 |
January 8, 1999 |
1/8/1999 |
January 8, 1999 |
1/18/1999 |
January 18, 1999 |
01/02/03 |
February 1, 2003 |
1999-Jan-08 |
January 8, 1999 |
Jan-08-1999 |
January 8, 1999 |
08-Jan-1999 |
January 8, 1999 |
99-Jan-08 |
January 8, 1999 |
08-Jan-99 |
January 8, 1999 |
08-Jan-06 |
January 8, 2006 |
Jan-08-99 |
January 8, 1999 |
19990108 |
ISO 8601; January 8, 1999 |
990108 |
ISO 8601; January 8, 1999 |
1999.008 |
年和日 |
J2451187 |
儒略日 |
January 8, 99 BC |
公元前 99 年 |
PGTYPESdate_to_asc #返回 date 变量的文本表示形式。
char *PGTYPESdate_to_asc(date dDate);
该函数接收 dDate 作为其唯一参数。它将以 YYYY-MM-DD 格式输出日期。结果必须使用 PGTYPESchar_free() 释放。
PGTYPESdate_julmdy #从 date 类型变量中提取日、月、年的值。
void PGTYPESdate_julmdy(date d, int *mdy);
该函数接收 date d 和一个指向包含 3 个整数值的数组的指针 mdy。变量名表示顺序:mdy[0] 将包含月份编号,mdy[1] 将包含日期值,mdy[2] 将包含年份。
PGTYPESdate_mdyjul #从一个包含 3 个整数的数组(指定日、月、年)创建 date 值。
void PGTYPESdate_mdyjul(int *mdy, date *jdate);
该函数接收 3 个整数的数组(mdy)作为第一个参数,并接收一个指向 date 类型变量的指针作为第二个参数,该变量将保存操作结果。
PGTYPESdate_dayofweek #返回一个表示 date 值的星期几的数字。
int PGTYPESdate_dayofweek(date d);
该函数接收 date 变量 d 作为其唯一参数,并返回一个指示该日期星期几的整数。
0 - 星期日
1 - 星期一
2 - 星期二
3 - 星期三
4 - 星期四
5 - 星期五
6 - 星期六
PGTYPESdate_today #获取当前日期。
void PGTYPESdate_today(date *d);
该函数接收一个指向 date 变量的指针(d),并将其设置为当前日期。
PGTYPESdate_fmt_asc #使用格式掩码将 date 类型变量转换为其文本表示形式。
int PGTYPESdate_fmt_asc(date dDate, char *fmtstring, char *outbuf);
该函数接收要转换的日期(dDate)、格式掩码(fmtstring)以及将保存日期文本表示形式的字符串(outbuf)。
成功时返回 0,错误时返回负值。
以下字面量是您可以在格式掩码中使用的字段说明符
dd - 月份中的日期号。
mm - 一年中的月份。
yy - 年份(两位数)。
yyyy - 年份(四位数)。
ddd - 星期几的名称(缩写)。
mmm - 月份的名称(缩写)。
所有其他字符都逐字复制到输出字符串中。
表 34.3 显示了一些可能的格式。这将让您了解如何使用此函数。所有输出行都基于同一日期:1959 年 11 月 23 日。
表 34.3. PGTYPESdate_fmt_asc 的有效输入格式
| 格式 | 结果 |
|---|---|
mmddyy |
112359 |
ddmmyy |
231159 |
yymmdd |
591123 |
yy/mm/dd |
59/11/23 |
yy mm dd |
59 11 23 |
yy.mm.dd |
59.11.23 |
.mm.yyyy.dd. |
.11.1959.23. |
mmm. dd, yyyy |
Nov. 23, 1959 |
mmm dd yyyy |
Nov 23 1959 |
yyyy dd mm |
1959 23 11 |
ddd, mmm. dd, yyyy |
Mon, Nov. 23, 1959 |
(ddd) mmm. dd, yyyy |
(Mon) Nov. 23, 1959 |
PGTYPESdate_defmt_asc #使用格式掩码将 C char* 字符串转换为 date 类型值。
int PGTYPESdate_defmt_asc(date *d, char *fmt, char *str);
该函数接收一个指向 date 值的指针(d),用于解析日期的格式掩码(fmt),以及包含日期文本表示形式的 C char* 字符串(str)。预期文本表示形式与格式掩码匹配。但是,您不需要 1:1 映射字符串和格式掩码。该函数仅分析顺序并查找表示年份位置的字面量 yy 或 yyyy,表示月份位置的 mm,以及表示日期位置的 dd。
表 34.4 显示了一些可能的格式。这将让您了解如何使用此函数。
表 34.4. rdefmtdate 的有效输入格式
| 格式 | String | 结果 |
|---|---|---|
ddmmyy |
21-2-54 |
1954-02-21 |
ddmmyy |
2-12-54 |
1954-12-02 |
ddmmyy |
20111954 |
1954-11-20 |
ddmmyy |
130464 |
1964-04-13 |
mmm.dd.yyyy |
MAR-12-1967 |
1967-03-12 |
yy/mm/dd |
1954, February 3rd |
1954-02-03 |
mmm.dd.yyyy |
041269 |
1969-04-12 |
yy/mm/dd |
In the year 2525, in the month of July, mankind will be alive on the 28th day |
2525-07-28 |
dd-mm-yy |
I said on the 28th of July in the year 2525 |
2525-07-28 |
mmm.dd.yyyy |
9/14/58 |
1958-09-14 |
yy/mm/dd |
47/03/29 |
1947-03-29 |
mmm.dd.yyyy |
oct 28 1975 |
1975-10-28 |
mmddyy |
Nov 14th, 1985 |
1985-11-14 |
C 语言中的 timestamp 类型使您的程序能够处理 SQL timestamp 类型的数据。有关 PostgreSQL 服务器中等效类型的信息,请参阅 第 8.5 节。
可以使用以下函数处理 timestamp 类型
PGTYPEStimestamp_from_asc #将 timestamp 从其文本表示形式解析到 timestamp 变量中。
timestamp PGTYPEStimestamp_from_asc(char *str, char **endptr);
该函数接收要解析的字符串(str)和一个指向 C char* 的指针(endptr)。目前 ECPG 总是解析整个字符串,因此它目前不支持将第一个无效字符的地址存储在 *endptr 中。您可以安全地将 endptr 设置为 NULL。
该函数在成功时返回解析后的 timestamp。出错时,返回 PGTYPESInvalidTimestamp 并将 errno 设置为 PGTYPES_TS_BAD_TIMESTAMP。有关此值的说明,请参阅 PGTYPESInvalidTimestamp。
通常,输入字符串可以包含允许的日期规范、空格字符和允许的时间规范的任意组合。请注意,ECPG 不支持时区。它可以解析它们,但不会进行任何计算,例如 PostgreSQL 服务器所做的。时区说明符会被静默丢弃。
表 34.5 包含一些输入字符串的示例。
表 34.5. PGTYPEStimestamp_from_asc 的有效输入格式
| 输入 | 结果 |
|---|---|
1999-01-08 04:05:06 |
1999-01-08 04:05:06 |
January 8 04:05:06 1999 PST |
1999-01-08 04:05:06 |
1999-Jan-08 04:05:06.789-8 |
1999-01-08 04:05:06.789 (时区说明符被忽略) |
J2451187 04:05-08:00 |
1999-01-08 04:05:00 (时区说明符被忽略) |
PGTYPEStimestamp_to_asc #将日期转换为 C char* 字符串。
char *PGTYPEStimestamp_to_asc(timestamp tstamp);
该函数接收 timestamp tstamp 作为其唯一参数,并返回一个包含 timestamp 文本表示形式的已分配字符串。结果必须使用 PGTYPESchar_free() 释放。
PGTYPEStimestamp_current #检索当前 timestamp。
void PGTYPEStimestamp_current(timestamp *ts);
该函数检索当前 timestamp 并将其保存到 ts 指向的 timestamp 变量中。
PGTYPEStimestamp_fmt_asc #使用格式掩码将 timestamp 变量转换为 C char*。
int PGTYPEStimestamp_fmt_asc(timestamp *ts, char *output, int str_len, char *fmtstr);
该函数接收要转换的 timestamp 的指针作为第一个参数(ts)、输出缓冲区的指针(output)、为输出缓冲区分配的最大长度(str_len)以及用于转换的格式掩码(fmtstr)。
成功时,函数返回 0,错误时返回负值。
您可以在格式掩码中使用以下格式说明符。格式说明符与 libc 中的 strftime 函数使用的相同。任何非格式说明符都会被逐字复制到输出缓冲区中。
%A - 被本地化的全称星期几名称替换。
%a - 被本地化的缩写星期几名称替换。
%B - 被本地化的全称月份名称替换。
%b - 被本地化的缩写月份名称替换。
%C - 被世纪(年份/100)的十进制数替换;个位数前面会加上零。
%c - 被本地化的日期和时间表示替换。
%D - 等同于 %m/%d/%y。
%d - 被月份中的日期号(01–31)的十进制数替换。
%E* %O* - POSIX 区域扩展。序列 %Ec %EC %Ex %EX %Ey %EY %Od %Oe %OH %OI %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy 旨在提供替代表示。
此外,%OB 被实现为表示替代月份名称(单独使用,不提及日期)。
%e - 被月份中的日期号(1–31)的十进制数替换;个位数前面会加上空格。
%F - 等同于 %Y-%m-%d。
%G - 被包含大部分周(周一作为一周的第一天)的年份的带世纪十进制数替换。
%g - 被 %G 中的年份替换,但不带世纪(00–99)。
%H - 被小时(24 小时制)的十进制数(00–23)替换。
%h - 等同于 %b。
%I - 被小时(12 小时制)的十进制数(01–12)替换。
%j - 被一年中的日期号(001–366)的十进制数替换。
%k - 被小时(24 小时制)的十进制数(0–23)替换;个位数前面会加上空格。
%l - 被小时(12 小时制)的十进制数(1–12)替换;个位数前面会加上空格。
%M - 被分钟的十进制数(00–59)替换。
%m - 被月份的十进制数(01–12)替换。
%n - 被一个换行符替换。
%O* - 等同于 %E*。
%p - 被本地化的“ante meridiem”(上午)或“post meridiem”(下午)替换。
%R - 等同于 %H:%M。
%r - 等同于 %I:%M:%S %p。
%S - 被秒的十进制数(00–60)替换。
%s - 被自 Epoch 以来的秒数(UTC)替换。
%T - 等同于 %H:%M:%S
%t - 被一个制表符替换。
%U - 被一年中的周数(星期日作为一周的第一天)的十进制数(00–53)替换。
%u - 被星期几(星期一作为一周的第一天)的十进制数(1–7)替换。
%V - 被一年中的周数(星期一作为一周的第一天)的十进制数(01–53)替换。如果包含 1 月 1 日的周有四天或更多天在新的一年,则为第 1 周;否则为前一年的最后一周,下一周为第 1 周。
%v - 等同于 %e-%b-%Y。
%W - 被一年中的周数(星期一作为一周的第一天)的十进制数(00–53)替换。
%w - 被星期几(星期日作为一周的第一天)的十进制数(0–6)替换。
%X - 被本地化的时间表示替换。
%x - 被本地化的日期表示替换。
%Y - 被带世纪的年份的十进制数替换。
%y - 被不带世纪的年份的十进制数(00–99)替换。
%Z - 被时区名称替换。
%z - 被与 UTC 的时区偏移量替换;前导加号表示东于 UTC,减号表示西于 UTC,小时和分钟后跟两位数字,中间没有分隔符(RFC 822 日期头的常见格式)。
%+ - 被本地化的日期和时间表示替换。
%-* - GNU libc 扩展。在执行数字输出时不做任何填充。
$_* - GNU libc 扩展。显式指定填充空格。
%0* - GNU libc 扩展。显式指定零进行填充。
%% - 被 % 替换。
PGTYPEStimestamp_sub #从一个 timestamp 中减去另一个 timestamp,并将结果保存在 interval 类型变量中。
int PGTYPEStimestamp_sub(timestamp *ts1, timestamp *ts2, interval *iv);
该函数将 ts2 指向的 timestamp 变量从 ts1 指向的 timestamp 变量中减去,并将结果存储在 iv 指向的 interval 变量中。
成功时,函数返回 0,错误时返回负值。
PGTYPEStimestamp_defmt_asc #使用格式掩码从文本表示形式解析 timestamp 值。
int PGTYPEStimestamp_defmt_asc(char *str, char *fmt, timestamp *d);
该函数接收变量 str 中的 timestamp 文本表示形式,以及变量 fmt 中要使用的格式掩码。结果将存储在 d 指向的变量中。
如果格式掩码 fmt 为 NULL,则函数将回退到默认格式掩码 %Y-%m-%d %H:%M:%S。
这是 PGTYPEStimestamp_fmt_asc 的反向函数。请参阅该文档以了解可能的格式掩码条目。
PGTYPEStimestamp_add_interval #将 interval 变量添加到 timestamp 变量。
int PGTYPEStimestamp_add_interval(timestamp *tin, interval *span, timestamp *tout);
该函数接收指向 timestamp 变量 tin 和指向 interval 变量 span 的指针。它将 interval 添加到 timestamp,并将结果 timestamp 保存到 tout 指向的变量中。
成功时,函数返回 0,错误时返回负值。
PGTYPEStimestamp_sub_interval #从 timestamp 变量中减去 interval 变量。
int PGTYPEStimestamp_sub_interval(timestamp *tin, interval *span, timestamp *tout);
该函数将 span 指向的 interval 变量从 tin 指向的 timestamp 变量中减去,并将结果保存到 tout 指向的变量中。
成功时,函数返回 0,错误时返回负值。
C 语言中的 interval 类型使您的程序能够处理 SQL interval 类型的数据。有关 PostgreSQL 服务器中等效类型的信息,请参阅 第 8.5 节。
可以使用以下函数处理 interval 类型
PGTYPESinterval_new #返回一个新分配的 interval 变量的指针。
interval *PGTYPESinterval_new(void);
PGTYPESinterval_free #释放先前分配的 interval 变量的内存。
void PGTYPESinterval_free(interval *intvl);
PGTYPESinterval_from_asc #从其文本表示形式解析一个 interval。
interval *PGTYPESinterval_from_asc(char *str, char **endptr);
该函数解析输入字符串 str,并返回一个指向已分配 interval 变量的指针。目前 ECPG 总是解析整个字符串,因此它目前不支持将第一个无效字符的地址存储在 *endptr 中。您可以安全地将 endptr 设置为 NULL。
PGTYPESinterval_to_asc #将 interval 类型变量转换为其文本表示形式。
char *PGTYPESinterval_to_asc(interval *span);
该函数将 span 指向的 interval 变量转换为 C char*。输出格式类似以下示例:@ 1 day 12 hours 59 mins 10 secs。结果必须使用 PGTYPESchar_free() 释放。
PGTYPESinterval_copy #复制一个 interval 类型变量。
int PGTYPESinterval_copy(interval *intvlsrc, interval *intvldest);
该函数将 intvlsrc 指向的 interval 变量复制到 intvldest 指向的变量中。请注意,您需要提前为目标变量分配内存。
decimal 类型类似于 numeric 类型。但是,它仅限于最多 30 位有效数字。与只能在堆上创建的 numeric 类型不同,decimal 类型可以创建在栈上或堆上(通过 PGTYPESdecimal_new 和 PGTYPESdecimal_free 函数)。在 第 34.15 节 中描述的 Informix 兼容模式下,还有许多其他函数用于处理 decimal 类型。
以下函数可用于处理 decimal 类型,并且它们不仅包含在 libcompat 库中。
PGTYPES_NUM_BAD_NUMERIC #一个参数应包含一个 numeric 变量(或指向 numeric 变量),但实际上其内存表示无效。
PGTYPES_NUM_OVERFLOW #发生溢出。由于 numeric 类型几乎可以处理任意精度,因此将 numeric 变量转换为其他类型可能会导致溢出。
PGTYPES_NUM_UNDERFLOW #发生下溢。由于 numeric 类型几乎可以处理任意精度,因此将 numeric 变量转换为其他类型可能会导致下溢。
PGTYPES_NUM_DIVIDE_ZERO #尝试了除以零的操作。
PGTYPES_DATE_BAD_DATE #将一个无效的日期字符串传递给 PGTYPESdate_from_asc 函数。
PGTYPES_DATE_ERR_EARGS #将无效参数传递给 PGTYPESdate_defmt_asc 函数。
PGTYPES_DATE_ERR_ENOSHORTDATE #PGTYPESdate_defmt_asc 函数在输入字符串中找到了一个无效的标记。
PGTYPES_INTVL_BAD_INTERVAL #将一个无效的 interval 字符串传递给 PGTYPESinterval_from_asc 函数,或者将一个无效的 interval 值传递给 PGTYPESinterval_to_asc 函数。
PGTYPES_DATE_ERR_ENOTDMY #PGTYPESdate_defmt_asc 函数在日/月/年分配中存在不匹配。
PGTYPES_DATE_BAD_DAY #PGTYPESdate_defmt_asc 函数找到了一个无效的月份中的日期值。
PGTYPES_DATE_BAD_MONTH #PGTYPESdate_defmt_asc 函数找到了一个无效的月份值。
PGTYPES_TS_BAD_TIMESTAMP #将一个无效的 timestamp 字符串传递给 PGTYPEStimestamp_from_asc 函数,或者将一个无效的 timestamp 值传递给 PGTYPEStimestamp_to_asc 函数。
PGTYPES_TS_ERR_EINFTIME #在无法处理的上下文中遇到了一个无限 timestamp 值。
PGTYPESInvalidTimestamp #一个 timestamp 类型的值,表示一个无效的时间戳。当 PGTYPEStimestamp_from_asc 函数解析错误时会返回此值。请注意,由于 timestamp 数据类型的内部表示,PGTYPESInvalidTimestamp 同时也是一个有效的 timestamp。它被设置为 1899-12-31 23:59:59。为了检测错误,请确保您的应用程序在每次调用 PGTYPEStimestamp_from_asc 后,不仅测试 PGTYPESInvalidTimestamp,还要测试 errno != 0。
如果您在文档中发现任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用 此表单 报告文档问题。