【正文】
C eval src_str=39。 C eval rpl_str=39。 C eval gdh=%replace(rpl_str:src_str) C*gdh=’liuhaitao ,is a good boy’C eval rpl_str=39。 C eval gdh=%replace(rpl_str:gdh:%scan(39。: C src_str)+3)C*gdh=’liuhaitao ,is notood boy’C eval gdh=%replace(rpl_str:gdh:%scan(39。: C src_str)+3:4)C*同上C*gdh=’liuhaitao ,is notood boy’C eval gdh=%replace(rpl_str:gdh:%scan(39。: C src_str)+3:0)C*gdh=’liuhaitao ,is not a good boy’,當(dāng)?shù)?個(gè)參數(shù)為0時(shí),則插入rpl_strC eval gdh=%replace(rpl_str:gdh:%scan(39。: C src_str)+3:8)C*gdh=’liuhaitao ,is notboy’C eval *inlr=39。 C return 其中VARYING表示該變量長(zhǎng)度可變,不是固定長(zhǎng)度。Dbuf s 30a inz(*zero)C eval buf=’gaodianhua’C eval len=%len(buf)C*len=30Dbuf s 30a inz(*zero) varyingC eval buf=’gaodianhua’C eval len=%len(buf)C*len=10Varying的效果等同于:C eval len=%len(%trim(buf))二、 轉(zhuǎn)換及日期函數(shù)%char (表達(dá)式{:格式}): 可以將數(shù)字、日期、時(shí)間或時(shí)間戳記數(shù)據(jù)轉(zhuǎn)換為字符型。如:%char(date:*iso) 或 %char(time:*hms)%int(數(shù)字表達(dá)式) : %INT 將數(shù)字表達(dá)式的值轉(zhuǎn)換為整數(shù)。%xlate(from:to:string{:startpos}):將string中的startpos位置開始將存在的from傳替換為to串。(1)如果在string中包含from串中的第n個(gè)字符,則將使用to串中的第n個(gè)字符替換。舉例:Dfrom s 30A Dto s 30A Dbuf s 40A (1)from串長(zhǎng)度=to串長(zhǎng)度C eval from=39。 C eval to=39。 C eval buf=39。 C eval buf=%xlate(from:to:buf)C buf dsply Buf顯示為:abc456(2)from串長(zhǎng)度to串長(zhǎng)度C eval from=39。 C eval to=39。 C eval buf=39。 C eval buf=%xlate(from:to:buf) C buf dsply Buf顯示為:abc456(3) from串長(zhǎng)度to串長(zhǎng)度C eval from=39。 C eval to=39。 C eval buf=39。 C eval buf=%xlate(from:to:buf) C buf dsply Buf顯示為:abc 56 /*4被空格替代*/當(dāng)to的定義長(zhǎng)度大于實(shí)際賦值長(zhǎng)度時(shí)會(huì)出現(xiàn)這種情況:Dfrom s 30A Dto s 3 A Dbuf s 40A C eval from=39。 C eval to=39。 C eval buf=39。 C eval buf=%xlate(from:to:buf) C buf dsply Buf顯示為:abc456 /*4未被空格替代*/實(shí)際上from和to之間的位數(shù)是一一對(duì)應(yīng)的。abcoobb39。1239。abc39。12 214539。139。如果不出現(xiàn)任何參數(shù),則 %DATE 返回當(dāng)前系統(tǒng)日期。無論輸入具有什么樣的格式,輸出總是以 *ISO 格式返回。如下:(1).表達(dá)式?jīng)]有任何分隔符Ddatestr s 10a inz(39。)Ddate s dC eval date=%date(datestr:*iso0)C date dsply(2).表達(dá)式有分隔符。2006082139。amp。 8 01/15/91 *DMY 日/月/年 dd/mm/yy / . , 39。39。amp。 8 91/01/15 *JUL 儒略歷 yy/ddd / . , 39。39。轉(zhuǎn)換后的值保持不變,但是作為時(shí)間返回。如果不指定任何參數(shù),則 %TIME 返回當(dāng)前系統(tǒng)時(shí)間。無論輸入具有什么樣的格式,輸出總是以 *ISO 格式返回。 8 14:00:00 *ISO 國(guó)際標(biāo)準(zhǔn)組織 . 8 *USA IBM USA 標(biāo)準(zhǔn)。 hh:mm AM or hh:mm PM : 8 02:00 PM *EUR IBM 歐洲標(biāo)準(zhǔn) . 8 *JIS 日本工業(yè)標(biāo)準(zhǔn)公元紀(jì)元 hh:mm:ss : 8 14:00:00%years (number)%months(number)%days(number)%hours(number)%minutes(number)%seconds(number)%mseconds(number)Ddate s d Dtime s t C eval date=%date( ) C date dsply C eval time=%time() C time dsply C eval date=date+%years(2)+%months(13) C +%days(10) C date dsply C eval time=time+%hours(3)+%minutes(30) C +%seconds(30) C time dsply 將數(shù)字轉(zhuǎn)換成可以添加到日期或時(shí)間戳記值的持續(xù)時(shí)間。結(jié)果是加上或減去了適當(dāng)年數(shù)的日期或時(shí)間戳記值.注意:日期經(jīng)過加減運(yùn)算后具有不可逆性如Date=20060831Eval date=date+%months(1)%months(1)現(xiàn)在date的值是:20060830%SUBDT(value:*MSECONDS|*SECONDS|*MINUTES|*HOURS|*DAYS|*MONTHS|*YEARS)%SUBDT(value:*MS|*S|*MN|*H|*D|*M|*Y)%subdt: 抽取日期、時(shí)間或時(shí)間戳記的一部分,并返回。 第二個(gè)參數(shù)是要抽取的部分。例如,2 月 10 日的天部分是 10 而不是 41。如:Ddate s d inz(D’2006821’)Dtime s t inz(T’’)Dnum s 8p 0C eval num=%subdt(date:*years)C*num=2006C eval num=%subdt(date:*days)C*num=21C eval num=%subdt(time:*hours)C*num=22C eval num=%subdt(time:*minutes)C*num=58SUBDUR 操作可用來:減去持續(xù)時(shí)間以建立新的“日期”、“時(shí)間”或“時(shí)間戳記” 計(jì)算持續(xù)時(shí)間Subdur操作碼的用法:Ddate1 s d inz(D39。)Ddate2 s d Dyy s 2p 0 inz(2) Dmm s 2p 0 inz(2) Ddd s 2p 0 inz(10) C date1 dsply C date1 subdur yy:*y date2 C date1 subdur mm