AS400开发入门-By adan(7)

2019-04-16 19:17

当factor2中指定的所有位都为on时,N3=*on

例(TESTB):

* The field bit settings are FieldF = 00000001, and FieldG = 11110001. * Indicator 16 is set on because bit 3 is off (0) in FieldF. * Indicator 17 is set off. C TESTB '3' FieldF 16 17 * Indicator 16 is set on because both bits 3 and 6 are off (0) in * FieldF. Indicators 17 and 18 are set off.

C TESTB '36' FieldF 161718 * Indicator 17 is set on because bit 3 is off (0) and bit 7 is on * (1) in FLDF. Indicators 16 and 18 are set off.

C TESTB '37' FieldF 161718 * Indicator 17 is set on because bit 7 is on (1) in FLDF. * Indicator 16 is set off. C TESTB '7' FieldF 16 17 * Indicator 17 is set on because bits 0,1,2, and 3 are off (0) and * bit 7 is on (1). Indicators 16 and 18 are set off. C TESTB FieldG FieldF 161718 * The hexadecimal literal X'88' (10001000) is used in factor 2. * Indicator 17 is set on because at least one bit (bit 0) is on * Indicators 16 and 18 are set off.

C TESTB X'88' FieldG 161718

新增日期、时间操作

增加ADDDUR, EXTRCT, SUBDUR, TEST等日期操作。

ADDDUR

计算Factor1/Result加上一段时间后的时间。 N1 N2 N3 C 原时间 ADDDUR(E) 时间段:类型 结果 ER Factor1可以是日期、时间、时间戳类型的变量,当没有指定Factor1时,result将被用作factor1。 Factor2必须是numeric类型的变量,不能含有小数位。Factor2可以是负数,此时实际上是在做减操作。Factor2由两部分组成,两部分使用”:”分割。第一部分是时间,第二部分使用来表示时间类型的关键字。 当Factor1中不是一个有效的时间,或者当没有指定factor1而且result没有指定一个有效的时间值时,此指令会运行出错。我们可以使用两种方式检查指令执行地是否正确:

61676237.doc – 第 31 页 共 39 页

在此指令执行完成后检查指示器。

在adddur后面使用”(E)”,在执行完此指令后检查%ERROR是否为*ON。

HKeywords+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ H TIMFMT(*USA) DATFMT(*MDY&)

DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++

DDateconst C CONST(D'12 31 92') * Define a Date field and initialize DLoandate S D DATFMT(*EUR) INZ(D'12 31 92') DDuedate S D DATFMT(*ISO) Dtimestamp S Z Danswer S T * Determine a DUEDATE which is xx years, yy months, zz days later * than LOANDATE. C LOANDATE ADDDUR XX:*YEARS DUEDATE C ADDDUR YY:*MONTHS DUEDATE C ADDDUR ZZ:*DAYS DUEDATE * Determine the date 23 days later C ADDDUR 23:*D DUEDATE * Add a 1234 microseconds to a timestamp C ADDDUR 1234:*MS timestamp * Add 12 HRS and 16 minutes to midnight C T'00:00 am' ADDDUR 12:*Hours answer C ADDDUR 16:*Minutes answer * Subtract 30 days from a loan due date

C ADDDUR -30:*D LOANDUE

EXTRACT

从time/timestamp/date变量中截取年/月/日/小时/分钟/秒钟/微秒 N1 N2 N3 C EXTRCT(E) 时间:类型 结果 ER

结果字段可以是数值类型也可以是字符类型。 错误检查方法与ADDDUR相同。 例:

D LOGONDATE S D

D DATE_STR S 15 D MONTHS S 8 DIM(12) CTDATA

* Move the job date to LOGONDATE. By default, LOGONDATE has an *ISO * date format, which contains a 4-digit year. *DATE also contains a * 4-digit year, but in a different format, *USA. C *USA MOVE *DATE LOGONDATE * Extract the month from a date field to a 2-digit field

61676237.doc – 第 32 页 共 39 页

* that is used as an index into a character array containing * the names of the months. Then extract the day from the * timestamp to a 2-byte character field which can be used in * an EVAL concatenation expression to form a string. * For example, if LOGONDATE is March 17, 1996, LOGMONTH will * contain 03, LOGDAY will contain 17, and DATE_STR will contain * 'March 17'. C EXTRCT LOGONDATE:*M LOGMONTH 2 0 C EXTRCT LOGONDATE:*D LOGDAY 2 C EVAL DATE_STR = %TRIMR(MONTHS(LOGMONTH)) C + ' ' + LOGDAY C SETON LR ** CTDATA MONTHS January February March April May June July August September October November

December

SUBDUR:计算两个时间之间的间隔时间或者是某一时间之前一段时间。

C

OR C

DATE/TIME/TIMESTAMP SUBDUR DURATION:DURATION_CODE

DATE/TIME/TIMESTAMP

错误判断方法与ADDDUR同

例:

* Determine a LOANDATE which is xx years, yy months, zz days prior to * the DUEDATE. C DUEDATE SUBDUR XX:*YEARS LOANDATE C SUBDUR YY:*MONTHS LOANDATE C SUBDUR ZZ:*DAYS LOANDATE * Add 30 days to a loan due date

C SUBDUR -30:*D LOANDUE * Calculate the number or days between a LOANDATE and a DUEDATE. C LOANDATE SUBDUR DUEDATE NUM_DAYS:*D 5 0 * Determine the number of seconds between LOANDATE and DUEDATE.

C LOANDATE SUBDUR DUEDATE NUM_SECS:*S 5 0 例:

DATE/TIME/TIMESTAMP SUBDUR DATE/TIME/TIMESTAMP DURATION:DURATION_CODE

61676237.doc – 第 33 页 共 39 页

D CURDATE S D DATFMT(*ISO) C C*ADDDUR C TIME CURDATE C CURDATE DSPLY C ADDDUR 1:*Y CURDATE C CURDATE DSPLY C ADDDUR 1:*M CURDATE C CURDATE DSPLY C ADDDUR 1:*D CURDATE C CURDATE DSPLY C*EXTRCT C TIME CURDATE C EXTRCT CURDATE:*Y YEAR 4 0 C YEAR DSPLY C EXTRCT CURDATE:*M MONTH 2 0 C MONTH DSPLY C EXTRCT CURDATE:*D DAY 2 0 C DAY DSPLY C*SUBDUR C TIME CURDATE C CURDATE DSPLY C SUBDUR 1:*Y CURDATE C CURDATE DSPLY C SUBDUR 1:*M CURDATE C CURDATE DSPLY C SUBDUR 1:*D CURDATE C CURDATE DSPLY C C C ENDPGM TAG C EVAL *INLR = '1' C RETURN

TEST

检查一个DATE/TIME/TIMESTAMP变量是否搬含有效的值。

如果我们要检查的一个变量是DATE/TIME/TIMESTAMP类型的变量,那么: C DATE/TIME/TIMESTAMP FORMATE TEST(E) C DATE FORMATE C TIME FORMATE 例:

TEST(DE) TEST(ET) TEST(EZ)

DATE/TIME/TIMESTAMP

如果我们要检查的是一个Char/Num类型的变量,那么:

DATE TIME

C TIMESTAMPE FORMATE TIMESTAMP

61676237.doc – 第 34 页 共 39 页

* Indicator 18 will not be set on, since the character field is a * valid *ISO timestamp field, without separators. C *ISO0 TEST (Z) Char_TSGMp 18 * Indicator 19 will not be set on, since the character field is a * valid *MDY date, without separators.

C *MDY0 TEST (D) Char_Date 19 * %ERROR will return '1', since Num_Date is not *DMY. C *DMY TEST (DE) Num_Date * No Factor 1 since result is a D data type field * %ERROR will return '0', since the field * contains a valid date C TEST (E) Datefield * In the following test, %ERROR will return '1' since the * Timefield does not contain a valid USA time. C *USA TEST (ET) Char_Time * In the following test, indicator 20 will be set on since the * character field is a valid *CMDY, but there are separators. C *CMDY0 TEST (D) char_date2 20 * In the following test, %ERROR will return '0' since * the character field is a valid *LONGJUL date. C *LONGJUL TEST (DE) char_date3

时间类型关键字:

*YEARS for the year (*Y)

*MONTHS for the month (*M)

*DAYS for the day of the month (*D)

*HOURS for the hours (*H)

*MINUTES for the minutes (*MN)

*SECONDS for the seconds (*S)

61676237.doc – 第 35 页 共 39 页


AS400开发入门-By adan(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:如何提升谈判能力?

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: