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
。
如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。