亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: [轉(zhuǎn)帖]ESQL/C的數(shù)據(jù)類型 [打印本頁(yè)]

作者: 大夢(mèng)    時(shí)間: 2003-01-09 01:16
標(biāo)題: [轉(zhuǎn)帖]ESQL/C的數(shù)據(jù)類型
ESQL/C的數(shù)據(jù)類型  

一、
1、SQL與C數(shù)據(jù)類型的對(duì)應(yīng)
簡(jiǎn)單類型
SQL         C
CHAR(n)           char(n+1)
CHARCTER(n)       char *
SMALLINT          short int
INTERGER
INT          long int
SMALLFLOAT
REAL          float
FLOAT
DOUBLE PRECISIONdouble
SERIAL           long int
DATE           long int
復(fù)雜類型
SQL           C
DECIMAL
DEC NUMERIC          dec_t or struct decimal
MONEY          dec_t or struct decimal
DATETIME          dtime_t or struct dtime
INREVER              intrvl_t or struct intrvl
VARCHAR              varchar or string

2、數(shù)據(jù)類型轉(zhuǎn)換

轉(zhuǎn)換類型  轉(zhuǎn)換后
FLOAT  DECIMAL(16)
SMALLFLOAT  DECIMAL(8)
INTERGER  DECIMAL(10,0)
SAMLLINT  DECIMAL(5,0)  


二、數(shù)據(jù)類型的轉(zhuǎn)換函數(shù)
(一)有關(guān)CHAR類型的函數(shù)
1、以空值結(jié)尾的串的操作函數(shù)
rdownshift(char *s)          把一個(gè)字符串中的所有字母轉(zhuǎn)換成小寫形式。
rupshift(char *s)             把一個(gè)字符串中的所有字母轉(zhuǎn)換成大寫形式。
stcat(char *s, char *dest)      把一個(gè)字符串同另一個(gè)字符串相連接。
stcmpr(char *s1, char *s2)     比較兩個(gè)字符串。
stcopy(char *from, char *to)   把一個(gè)字符串拷貝到另一個(gè)字符串。
stleng(char *string)           統(tǒng)計(jì)字符串的長(zhǎng)度。

2、定長(zhǎng)串的操作函數(shù)
bycmpr(char byte1, byte2, rpt len)   比較兩組連續(xù)的字節(jié)內(nèi)存塊。
bycopy(char *from, char *to, int len) 把一塊內(nèi)存的內(nèi)容拷貝到另一塊內(nèi)存。
byfill(char *to, int len, char ch)      用字符填充指定的內(nèi)存塊。
byleng(char from, int count)         統(tǒng)計(jì)有效字符的數(shù)目。有效字符是指字符串去除了末尾空格所剩的字符。

3、字符串操作函數(shù)
ldchar(char *from, int num, char *to)   拷貝定長(zhǎng)串到空值結(jié)尾的串。
stchar(char *from, char *to, int num)   拷貝空值結(jié)尾的串到定長(zhǎng)串。

4、字符串函數(shù)簡(jiǎn)單數(shù)值轉(zhuǎn)換
rstod(char *str, double *dblval) 把以空值結(jié)束的字符串轉(zhuǎn)換成C的double型
rstoi(char *str, int *intval)     把以空值結(jié)束的字符串轉(zhuǎn)換成C的int類型。
rstol(char *str, long *lngval)   把以空值結(jié)束的字符串轉(zhuǎn)換成C的long類型。


(二)DATE類型的函數(shù)
1、創(chuàng)建內(nèi)部日期
rdefmtdate(long *jdate, char *frmt char *str)  生成具有確定格式的日期字符串。(str字符串和fmt必須按月、日、年的同一順序)
返回代碼:
      0操作成功。
  -1204在str參數(shù)中有非法的月份。
  -1206在str參數(shù)中有非法的日期。
  -1209由于str中沒(méi)有包含年、月、日各部分間的定界符,str的長(zhǎng)
度必須準(zhǔn)確定義為6或8個(gè)字節(jié)長(zhǎng)。
  -1212fmt中沒(méi)有包含年、月、日部分。
fmt和str的有效組合
  fmt                str
  “mmddyy”          “DEC 25th 1997”
  “mmm.dd.yyyy”     “dec 25 1997”
  “mmm.dd.yyyy”     “DEC-25-1997”
  “mmm.dd.yyyy”     “12251997”
  “mmm.dd.yyyy”     “12/25/1997”
  “yy/mm/dd”        “97/12/25”
  “yy/mm/dd”        “1997,December, 25th"
  “yy/mm/dd”        “In the year 1997, the month of December, its 25th day”
  “dd-mm-yy”        “This 25th day of December, 1997”
rmdyjul(short mdy[3], long *jdate) 用三個(gè)短整數(shù)生成一個(gè)內(nèi)部日期這三個(gè)整數(shù)是有關(guān)年、月、日的數(shù)字值。(年必須以完整的形式表達(dá))
返回代碼:
      0操作成功。
  -1204在mdy[2]中有非法年份。
  -1205在mdy[1]中有非法月份。
  -1206在mdy[0]中有非法日期。

rstrdate(char *str, long *jdate) 將一個(gè)字符串日期轉(zhuǎn)換成一內(nèi)部格式的日期。
rtoday(long *jdate)           從系統(tǒng)日期創(chuàng)建一個(gè)內(nèi)部日期值。

2、從內(nèi)部日期轉(zhuǎn)換成其他類型
rfmtdate(ling jdate, char *fmt, char *str) 從內(nèi)部格式的日期類型值創(chuàng)建格式化的字符串。
返回代碼:
      0操作成功。
  -1210內(nèi)部日期不能被轉(zhuǎn)換成月-日-年格式。
  -1211程序存儲(chǔ)溢出,即存儲(chǔ)分配錯(cuò)誤。

rjulmdy(long jdate, short mdy[3]) 從一個(gè)內(nèi)部日期生成一個(gè)含有3個(gè)短整數(shù)的數(shù)組對(duì)應(yīng)內(nèi)部日期的月、日、年。

rdatestr(long jdate, char *str) 從一個(gè)內(nèi)部日期值創(chuàng)建缺省的日期字符串。

rdayofweek(long jdate) 給定一內(nèi)部格式表示的日期,此函數(shù)返回所對(duì)應(yīng)的星期中的某一天。

rleapyear(int year) 用來(lái)判斷給定的年份是否為閏年。
返回值:
   TRUE(1)     是閏年
   FALSE(0)    不是閏年


(三)簡(jiǎn)單數(shù)值類型的格式化函數(shù)
rfmtdouble(double dbval, char *fmt, char *str) 將雙精度格式化為指定的模板格式。
rfmtlong(double longval, char *fmt, char *str) 將長(zhǎng)整型值格式化為指定的模板格式。
可以構(gòu)成格式模板串的字符:
*以星號(hào)代替空格。
&以0代替空格。
#代表一個(gè)數(shù)字或空格的位置。
<左調(diào)整,顯示一個(gè)逗號(hào),僅當(dāng)左邊有數(shù)字時(shí)才顯示。
.顯示一個(gè)小數(shù)點(diǎn),一個(gè)格式模板串只能有一個(gè)小數(shù)點(diǎn)。
-顯示負(fù)號(hào),當(dāng)數(shù)字為負(fù)的時(shí)候顯示。
+顯示正號(hào),當(dāng)數(shù)字為正的時(shí)候顯示。
(顯示一個(gè)負(fù)號(hào),同(一起顯示負(fù)值。
)顯示一個(gè)負(fù)號(hào),同)一起顯示負(fù)值。
$顯示美元符號(hào)。


(四)處理空值的數(shù)值類型函數(shù)
risnull(int type, char *cvar)  檢查C變量是否為空值。
rsetnull(int type, char *cvar) 給C變量置空值。

(五)其他函數(shù)
typalign(int pos, int type) 返回一具有指定數(shù)據(jù)類型變量的下一個(gè)位置。
rtypmsize(int sqltype, int sqllen) 返回你必須分配在存儲(chǔ)單元中的指定的C或RDSQLD的字節(jié)數(shù)。
rtyname(int sqltype) 返回一包含指定RDSQL類型名的以空結(jié)尾的串。
rtypwidth(int sqltype, intsqllen) 返回一具有RDSQL類型的值轉(zhuǎn)換為一字符類型時(shí)避免截取所需的最小字符數(shù)。


ESQL/C數(shù)據(jù)類型的進(jìn)一步說(shuō)明

一、DECIMAL數(shù)據(jù)類型的使用
1、DECIMAL函數(shù)——把C的數(shù)據(jù)類型轉(zhuǎn)換為DECIMAL值
deccvasc(char *from, int len, dec_t *to) 把ASCII字符串轉(zhuǎn)換成DECIMAL值。
返回值:
0轉(zhuǎn)換成功
-1200數(shù)字太大,上溢。
-1201數(shù)字太小,下溢。
-1213存在非數(shù)值字符。
-1216存在錯(cuò)誤指數(shù)。
注意事項(xiàng):
(1)字符串的前導(dǎo)空格被忽略。
(2)字符串可以有前導(dǎo)符號(hào)“+”或“-”。
(3)字符串可以包含e或E的指數(shù)形式,指數(shù)前可帶符號(hào)“+”或“-”。

deccvint(int from, dec_t *to)     把C的整數(shù)轉(zhuǎn)化成DECIMAL值。
deccvlong(long from, dec_t *to)  把C的長(zhǎng)整數(shù)轉(zhuǎn)化成DECIMAL值。
deccvdbl(double from, dec_t *to) 把C的雙精度值轉(zhuǎn)化成DECIMAL值。


2、DECIMAL函數(shù)——把DECIMAL值轉(zhuǎn)換成字符型
dectoasc(dec_t *from, char *to, int len, int rt) 把DECIMAL值轉(zhuǎn)換成ASCII字符串。
說(shuō)明:
len串緩沖區(qū)字節(jié)的最大長(zhǎng)度。
rt表示十進(jìn)制小數(shù)右邊十進(jìn)制的位數(shù)。
注意事項(xiàng):
(1)rt=-1,則十進(jìn)制位的個(gè)數(shù)有*from的十進(jìn)制值決定。
(2)如果此數(shù)不適合長(zhǎng)度len的字符串,則該函數(shù)將這個(gè)數(shù)轉(zhuǎn)換為指數(shù)表示的形式。如果仍不適合,則串用“*”號(hào)填滿。如果數(shù)的長(zhǎng)度短于串長(zhǎng),則右對(duì)齊且左部用空格填充。

dececvt(dec_t *from, int ndgt, int *decpt, int *sign) 將一十進(jìn)制數(shù)轉(zhuǎn)換成以空格結(jié)束的具有指定個(gè)數(shù)的字符串,且返回此字符串的指針。

decfcvt(dec_t *from, int ndgt, int *decpt, int *sign) 將一十進(jìn)制數(shù)轉(zhuǎn)換成以空格結(jié)束、小數(shù)點(diǎn)右邊具有指定位數(shù)的字符串,且返回此字符串的指針。

rfmtdec(dec_t *from, char *format, char *to) 將DECIMAL值轉(zhuǎn)換成格式化的字符串。

3、DECIMAL函數(shù)——把DECIMAL值轉(zhuǎn)換成數(shù)值型
dectoint(dec_t *from, int *to)&#59;
dectolong(dec_t *from, long *to)&#59;
dectodbl(dec_t *from, double *to)

4、DECIMAL函數(shù)——算術(shù)運(yùn)算
decadd(dec_t *op1, dec_t *op2, dec_t *result)&#59;
decsub(dec_t *op1, dec_t *op2, dec_t *result)&#59;
decmul(dec_t *op1, dec_t *op2, dec_t *result)&#59;
decdiv(dec_t *op1, dec_t *op2, dec_t *result)&#59;
返回代碼:
0操作成功
-1200操作產(chǎn)生上溢
-1201操作產(chǎn)生下溢
-1202試圖用零作除數(shù)

5、DECIMAL函數(shù)——DECIMAL操作
deccmp(dec_t *dec1, dec_t *dec2)&#59;
返回值:
-1dec1<dec2
0dec1=dec2
1dec1>;dec2
          DECUNKNOW有一個(gè)是空值

deccopy(dec_t *dec1, dec_t *dec2)&#59;
decround(dec_t *dec1, int scale)&#59;
dectrunc(dec_t *dec1, int scale)&#59;

二 、DATETIME和INTERVAL使用方式及實(shí)例
1、概述
DATETIME數(shù)據(jù)類型存放時(shí)間,時(shí)間由以下部分組成:YEAR,MONTH,DAY,HOUR,MINUTE,SECOND和秒的FRACTION(n)。
INTERVAL數(shù)據(jù)類型存放時(shí)間間隔,組成部分同上。

定義宿主變量:
DATETIME   LargestQulifier  TO  SmallQulifier
INTERVAL   LargestQulifier  TO  SmallQulifier
限定詞:
YEAR,MONTH,DAY,HOUR,MINUTE,SECOND,F(xiàn)RACTION(n)
也可以不指明修飾符,直接定義。

2、DATETIME和INTERVAL宏及轉(zhuǎn)換函數(shù)
在頭文件datetime.h中定義了8個(gè)名字和5個(gè)宏,可以在操作DATETIME和INTERVAL值時(shí)使用它們。
名字
TU_YEAR用于YEAR修飾符域的名字
TU_MONTH
TU_HOUR
TU_DAY
TU_MINUTE
TU_SECOND
TU_FRAC用于開(kāi)始的fraction修飾符域的名字
TU_Fn用于結(jié)束的fraction(n)修飾符域的名字(n=1~5)

TU_LEN(q)
TU_START(q)
TU_END(q)
TU_DTENCODE(s,e)
TU_IENCODE(p,s,e)

3、DATETIME和字符串之間的轉(zhuǎn)換函數(shù)
dtcvasc(char *from, dtime_t *to)把ANSI兼容的字符串轉(zhuǎn)換為DATETIME值
dtcvfmtasc(char *from, char *fmt, dtime_t *to) 把格式化的字符串轉(zhuǎn)換為DATETIME值。
dttoasc(char *from, dtime_t *to)
dttofmtasc(char *from, dtime_t *to, int len, char *fmt)
4、操作DATETIME值的函數(shù)
dtcurrent(dtime *to) 把當(dāng)前日期和時(shí)間賦給一個(gè)DATETIME變量。
dtextent(dtime_t *from, dtime *to) 拷貝DATETIME值,使用的是不同的修飾符。

5、INTERVAL轉(zhuǎn)換函數(shù)
incvasc(char *from, intrvl_t *to)把ANSI兼容的字符串轉(zhuǎn)換為INTERVAL值
incvfmtasc(char *from, char *fmt, intrvl_t *to) 把格式化的字符串轉(zhuǎn)換為INTERVAL值。
intoasc(char *from, intrvl_t *to)
intofmtasc(char *from, intrvl_t *to, int len, char *fmt)

6、提供DATETIME和INTERVAL算術(shù)操作的函數(shù)
rdtaddinv(dec_t *dt, int dg, dec_t *in, int iq, dec_t *sum) 把一個(gè)INTERVAL值加到一個(gè)DATETIME值上。
rdtsub(det_t *dt2, int dq2, dec_t *dt1, int dq1, dec_t *dt0, int dq0) 求兩個(gè)DATETIME值的差。

7、DATE類型和DATETIME類型之間的轉(zhuǎn)換
DATE→DATETIME
?&#59;定義一個(gè)帶有修飾符“year to day”的DATETIME變量
?&#59;使用rfmtdate()函數(shù)把DATE值轉(zhuǎn)換為一個(gè)字符串,使用的模板是yyyy-mm-dd
?&#59;使用dtcvasc()函數(shù)把字符串轉(zhuǎn)換成DATETIME類型變量的值。
?&#59;如果需要的話,可以使用dtextend()函數(shù)來(lái)調(diào)整DATETIME的修飾符。

DATETIME→DATE
?&#59;使用dtextend()函數(shù)把DATETIME的修飾符調(diào)整為“year to day”。
?&#59;使用dttoasc()函數(shù)以模板yyyy-mm-dd創(chuàng)建一個(gè)字符串。
?&#59;使用rdefmtdate()函數(shù)以模板yyyy-mm-dd把字符串轉(zhuǎn)換為一個(gè)DATE值。

8、有關(guān)DATETIME和INTERVAL值的其他運(yùn)算
rinvtodec(dec_t *v, int q, dec_t *dec) 把INTERVAL或DATETIME類型的值轉(zhuǎn)換成DECIMAL類型
redectoinv(dec_t *dec, dec_t *v, int q) 把DECIMAL值轉(zhuǎn)換成INTERVAL或DATETIME類型值




      
作者: liwei1002    時(shí)間: 2003-01-09 10:35
標(biāo)題: [轉(zhuǎn)帖]ESQL/C的數(shù)據(jù)類型
真好
作者: liwei1002    時(shí)間: 2003-01-09 10:37
標(biāo)題: [轉(zhuǎn)帖]ESQL/C的數(shù)據(jù)類型
還有更多的關(guān)于ESQL/C的內(nèi)容嗎
作者: 大夢(mèng)    時(shí)間: 2003-01-09 11:21
標(biāo)題: [轉(zhuǎn)帖]ESQL/C的數(shù)據(jù)類型
我去找些來(lái)!
作者: guixin    時(shí)間: 2003-03-31 17:03
標(biāo)題: [轉(zhuǎn)帖]ESQL/C的數(shù)據(jù)類型
不錯(cuò)呀,大夢(mèng)真不錯(cuò)
作者: wocclyl    時(shí)間: 2003-05-21 13:23
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽
作者: aspire    時(shí)間: 2004-03-07 19:24
標(biāo)題: [轉(zhuǎn)帖]ESQL/C的數(shù)據(jù)類型
真心感謝大夢(mèng)前輩!!
作者: nn531    時(shí)間: 2010-03-31 15:53
感謝LZ。總不用了,關(guān)鍵時(shí)候能用上。{:3_189:}
作者: lloydm    時(shí)間: 2012-12-06 14:36
提示: 作者被禁止或刪除 內(nèi)容自動(dòng)屏蔽




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2