pgtypes 函式庫將 PostgreSQL 資料庫型別對應到可在 C 程式中使用的 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 節。由於任意精度,此變數需要能夠動態擴展和收縮。這就是為什麼您只能在堆積上建立 numeric 變數,透過 PGTYPESnumeric_new
和 PGTYPESnumeric_free
函式。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 變數,並在第三個變數中傳回結果。
int PGTYPESnumeric_sub(numeric *var1, numeric *var2, numeric *result);
該函式從變數 var1
中減去變數 var2
。運算的結果儲存在變數 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,包括溢位 (overflow)。 如果發生溢位,全域變數 errno
將額外設置為 PGTYPES_NUM_OVERFLOW
。
PGTYPESnumeric_to_int
#將 numeric 類型的變數轉換為 int。
int PGTYPESnumeric_to_int(numeric *nv, int *ip);
該函數將 nv
指向的變數中的 numeric 值轉換為 ip
指向的 integer 變數。 成功時返回 0,發生錯誤時返回 -1,包括溢位 (overflow)。 如果發生溢位,全域變數 errno
將額外設置為 PGTYPES_NUM_OVERFLOW
。
PGTYPESnumeric_to_long
#將 numeric 類型的變數轉換為 long。
int PGTYPESnumeric_to_long(numeric *nv, long *lp);
該函數將 nv
指向的變數中的 numeric 值轉換為 lp
指向的 long integer 變數。 成功時返回 0,發生錯誤時返回 -1,包括溢位 (overflow) 和下溢 (underflow)。 如果發生溢位,全域變數 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,包括溢位 (overflow)。 如果發生溢位,全域變數 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
#從時間戳記中提取日期部分。
date PGTYPESdate_from_timestamp(timestamp dt);
該函數接收時間戳記作為其唯一的參數,並返回從該時間戳記中提取的日期部分。
PGTYPESdate_from_asc
#從其文字表示形式解析日期。
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 |
year and day of year |
J2451187 |
Julian day |
January 8, 99 BC |
year 99 before the Common Era |
PGTYPESdate_to_asc
#返回日期變數的文字表示形式。
char *PGTYPESdate_to_asc(date dDate);
該函數接收日期 dDate
作為其唯一的參數。 它將以 1999-01-18
的形式輸出日期,即以 YYYY-MM-DD
格式輸出。 必須使用 PGTYPESchar_free()
釋放結果。
PGTYPESdate_julmdy
#從 date 類型的變數中提取日、月和年的值。
void PGTYPESdate_julmdy(date d, int *mdy);
該函數接收日期 d
和一個指向 3 個整數值的陣列 mdy
的指標。 變數名稱指示順序:mdy[0]
將設置為包含月份的數字,mdy[1]
將設置為日的值,mdy[2]
將包含年份。
PGTYPESdate_mdyjul
#從指定日期的日、月和年的 3 個整數陣列建立一個日期值。
void PGTYPESdate_mdyjul(int *mdy, date *jdate);
該函數接收 3 個整數的陣列 (mdy
) 作為其第一個參數,並接收指向 date 類型變數的指標作為其第二個參數,該變數應保存運算的結果。
PGTYPESdate_dayofweek
#傳回代表日期值的星期幾的數字。
int PGTYPESdate_dayofweek(date d);
該函數接收日期變數 d
作為其唯一的參數,並返回一個整數,該整數指示此日期的星期幾。
0 - 星期日
1 - 星期一
2 - 星期二
3 - 星期三
4 - 星期四
5 - 星期五
6 - 星期六
PGTYPESdate_today
#取得目前日期。
void PGTYPESdate_today(date *d);
此函式接收日期變數的指標 (d
),並將其設定為目前的日期。
PGTYPESdate_fmt_asc
#使用格式遮罩將日期型別的變數轉換為其文字表示形式。
int PGTYPESdate_fmt_asc(date dDate, char *fmtstring, char *outbuf);
此函式接收要轉換的日期 (dDate
)、格式遮罩 (fmtstring
),以及將保存日期文字表示形式的字串 (outbuf
)。
成功時,會傳回 0;如果發生錯誤,則傳回負值。
以下字面值是您可以使用的欄位指定符:
dd
- 月份中的日數。
mm
- 一年中的月數。
yy
- 以兩位數字表示的年份。
yyyy
- 以四位數字表示的年份。
ddd
- 日的名稱(縮寫)。
mmm
- 月的名稱(縮寫)。
所有其他字元都會以 1:1 的方式複製到輸出字串。
表格 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*
字串轉換為日期型別的值。
int PGTYPESdate_defmt_asc(date *d, char *fmt, char *str);
此函式接收一個指標,指向應該保存運算結果的日期值 (d
),用於解析日期的格式遮罩 (fmt
),以及包含日期文字表示形式的 C char* 字串 (str
)。 文字表示形式應符合格式遮罩。 但是,您不需要字串與格式遮罩之間有 1:1 的對應關係。 此函式僅分析順序,並尋找指示年份位置的字面值 yy
或 yyyy
,指示月份位置的 mm
,以及指示日期位置的 dd
。
表格 34.4 顯示了一些可能的格式。 這將使您了解如何使用此函式。
表格 34.4. rdefmtdate
的有效輸入格式
格式 | 字串 | 結果 |
---|---|---|
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
- 替換為 (year / 100) 作為十進制數字;個位數前面加零。
%c
- 替換為時間和日期的國家表示形式。
%D
- 相當於 %m/%d/%y
。
%d
- 替換為月份中的日數,表示為十進制數字 (01–31)。
%E*
%O*
- POSIX locale 擴充。序列 %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
- 會被替換為 tab。
%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
#從另一個時間戳記中減去一個時間戳記,並將結果儲存在 interval 類型的變數中。
int PGTYPEStimestamp_sub(timestamp *ts1, timestamp *ts2, interval *iv);
此函式會從 ts1
指向的時間戳記變數中,減去 ts2
指向的時間戳記變數,並將結果儲存在 iv
指向的 interval 變數中。
成功時,此函式會傳回 0;如果發生錯誤,則傳回負值。
PGTYPEStimestamp_defmt_asc
#使用格式遮罩,從其文字表示法剖析時間戳記值。
int PGTYPEStimestamp_defmt_asc(char *str, char *fmt, timestamp *d);
此函式會接收變數 str
中的時間戳記文字表示法,以及變數 fmt
中要使用的格式遮罩。結果會儲存在 d
指向的變數中。
如果格式遮罩 fmt
為 NULL,此函式將退回預設格式遮罩,即 %Y-%m-%d %H:%M:%S
。
這是 PGTYPEStimestamp_fmt_asc
的反向函式。請參閱該處的文件,以了解可能的格式遮罩項目。
PGTYPEStimestamp_add_interval
#將 interval 變數加到時間戳記變數。
int PGTYPEStimestamp_add_interval(timestamp *tin, interval *span, timestamp *tout);
此函式會接收指向時間戳記變數 tin
的指標,以及指向 interval 變數 span
的指標。它會將 interval 加到時間戳記,並將結果時間戳記儲存在 tout
指向的變數中。
成功時,此函式會傳回 0;如果發生錯誤,則傳回負值。
PGTYPEStimestamp_sub_interval
#從時間戳記變數中減去 interval 變數。
int PGTYPEStimestamp_sub_interval(timestamp *tin, interval *span, timestamp *tout);
此函式會從 tin
指向的時間戳記變數中,減去 span
指向的 interval 變數,並將結果儲存到 tout
指向的變數中。
成功時,此函式會傳回 0;如果發生錯誤,則傳回負值。
C 語言中的 interval 類型讓您的程式能夠處理 SQL 類型 interval 的資料。請參閱第 8.5 節,以了解 PostgreSQL 伺服器中對應的類型。
以下函數可用於處理 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
#輸入字串中存在無效的 token,由 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
#無效的時間戳記字串已傳遞給 PGTYPEStimestamp_from_asc
函數,或無效的時間戳記值已傳遞給 PGTYPEStimestamp_to_asc
函數。
PGTYPES_TS_ERR_EINFTIME
#在無法處理的上下文中遇到無限時間戳記值。
如果您在文件中發現任何不正確、與特定功能的經驗不符或需要進一步澄清的地方,請使用此表單報告文件問題。