容易忘记的常识
● 基礎類型
.P
?????? 聲明: TYPES mount? TYPE p length 5 DECIMALS 2.
又稱為壓縮類型.
值范圍1~15整型數字(除去最后的符號位).
若在沒有定義長度的情況下,默認為最大長度,即15.
點號不算在表示位數內,但表示位數過長的情況下,點號會自動消除,如:12,345; 1234567,890,123
小數點可表示最大位數14.小數點部分按四舍五入法取值.
?
.DEC
?????? DEC(13,2)? 長度為13,其中2位小數位.
金額類型.
與類型P的轉換公式為:P((n+1)/2)????? 即DEC(13,2) = P(7)
??????????????????????????????????????????? ※注意DEC(14,2) = P(8) / DEC(15,2) = P(8)
與之相關的常用的domain有??????????? DEC13(13位的小數點項目)
???????????????????????????????????? DECV13(13位的小數點項目(正負))
DEC15(15位的小數點項目)
???????? ??????????????????????????? DECV15(15位的小數點項目(正負))
金額加算等需要注意溢出(CX_SY_ARITHMETIC_OVERFLOW)
.F
???????? 浮動小數點數
???????? 可表示值范圍1~31.如:1000000 ? 1.0000000000000000E+06
???????? 用WRITE中的EXPONENT屬性可以設定變量的指數,
如: f = 1000000. WRITE f EXPONENT 2.?10000.000000000000E+02
??????????????????????????????????????????????????????????????????????????
● 演算符
+?????????????? 加算
-?????????????? 減算
*?????????????? 乘算
/?????????????? 除算
DIV???????????? 整除
MOD??? ???????? 取模
**????????????? 乘方
?
????????? 負數取模(MOD)
例: ?1 MOD 5 ?1????? 25 MOD 7 ?4
1 MOD -5 ?1????? 25 MOD -7 ?4
?????? -1 MOD 5 ?4????? -25 MOD 7 ?3
?????? -1 MOD -5 ?4????? -25 MOD -7?3
??????
???????? 從上例可以得出以下的結論
①?? 取模結果只與除數符號有關,與被除數的符號無關
②?? 所謂的取模即為兩數相除后得到的余數,所以取模結果為幾的關鍵是相除后的商是多少.
上例可以看出取模運算的商是兩數可除盡的最小整數值.如:25/7?3(余4) -25/7?-4(余3)
※可除盡的最小整數值的符號與除數符號一致(-25/-7?-4(余3))
③?? 取模結果一般都為正數(取模結果 = | |商 * 被除數| - ?|除數| |)
④?? ABAP的取模結果不代表數學上的取模結果,根據編譯器的不同, 取模結果也可能不同
????????
?
● 常用函數
例 ???? 5.55-??? (P)
abs(n)??????????????? 絕對值???????????? 5.55
sign(n)???????? 符號值???????????? 1.00-
ceil(n)???????? >n的整數最小值??? 5.00-
floor(n)??????? <n的整數最大值??? 6.00-
trunc(n)??????? 取整數部?????????? 5.00-
frac(n)???????? 取小數部?????????? 0.55-
?
strlen(str)?? 取文字列個數(unicode對應)
lines(arg)??? 取內表的行數
?
● 邏輯運算符
????????? 數值型(I 型、F 型、P 型)
= ?????? EQ
<>?????? NE
<??????? LT
>??????? GT
<=?????? LE
>=?????? GE
????????? 文字型(C、D、N、T、STRING)
例:f1 邏輯式f2
?????????????????? 含義????????????????????????????????????????????????????????????????? 大小寫區分??????????????? 右側的空格處理
CO???????????? 全包含(f1 ? f2)??????????????????????????????????????? 區分???????????????????????????? 處理
CN???????????? CO的相反??????????????????????????????????????????????????????? 區分???????????????????????????? 處理
CA???????????? 至少包含一個文字(f1 ? f2)??????????????????? 區分???????????????????????????? 無視
NA???????????? CA的相反??????????????????????????????????????????????????????? ?????????????????? 區分???????????????????????????? 無視
CS???????????? 包含(f1 ? f2)??????????????????????????????????????????? 不區分???????????????????????? 無視
NS???????????? CS的相反?????????????????????????????????????????????????????????????????????????? 不區分???????????????????????? 無視
CP???????????? 與正規表達式匹配(f1 ? f2)??????????????????? 不區分???????????????????????? 無視
NP???????????? CP的相反?????????????????????????????????????????????????????????????????????????? 不區分???????????????????????? 無視
?
※1.CO中要注意f1的右側空格是作為一個文字來進行處理的,看下面的代碼
DATA: str1(10) TYPE c VALUE 'abc',
????? ?? ???????? str2(10) TYPE c VALUE 'abcdefghij'.
if str1 cp str2.
? write '●'.
else.
???????? ?? write '×'.
endif.
運行結果為'×',原因就在于str1的右側還包含了7個space,而str2中沒有space字符。
?
2. CP中可以使用正則表達式,*,+,轉意符#
?
● 數據處理
????????? 日期,時間處理
例:
2???????? 取上個月的最后一天的日期
ultimo????? = sy-datum.
ultimo+6(2) = '01'.
ultimo????? = ultimo - 1.
2???????? 取相隔時間差
DATA: t1 TYPE t VALUE '200000',
????? ???????????? ??t2 TYPE t VALUE '020000'.
diff ???= t2 - t1.
seconds = diff MOD 86400.
hours ??= seconds / 3600.
?
????????? 字符串處理
2???????? SHIFT
根據指定文字數向左向右移動,根據指定子字符串的值向左向右移動,刪除指定子字符串的值等
2???????? REPLACE
對字符串進行置換
2???????? TRANSLATE
對字符串大小寫轉換及一些簡單置換
2???????? OVERLAY
將第一個字符串內容置換成相同位置的第二個字符串的內容
2???????? Strlen()
計算字符串的長度(字符串的右space不算在字符串長度內)
2???????? CONDENSE
去除space
2???????? CONCATENATE
字符串連接
2???????? SPLIT
字符串分割
2???????? +OFFSET(LENGTH)
取子字符串
?
● 內表
????????? STANDARD TABLE
標準內表,通過索引對表進行訪問,所屬index table
????????? SORTED TABLE
所屬index table。有索引。
可以設置主鍵,也可不設。
設置主鍵后,在行插入(insert)時,可根據主鍵自動排序。
(但在行追加(append)時,如果追加行的主鍵值大于內表中最后一條記錄的主鍵值時,會有執行錯誤發生)
另外,在行檢索(read itab from stru)時,可以根據stru中的主鍵值(主鍵值以外的項目值被無視)進行檢索。
關于主鍵唯一性的設置 NON-UNIQUE:主鍵值不唯一/UNIQUE:主鍵唯一
????????? HASHED TABLE
哈希內表。
無索引。所以所有關于使用index操作表的語句都不可使用。
必須設置主鍵。
?
● 內表操作
????????? 行追加/插入
APPEND ? ???????? 單一/復數行追加。一般用于STANDARD TABLE的行追加。
INSERT????????????????????? 單一/復數行插入。一般用于SORTED TABLE的行插入。行插入時能根據主鍵自動按升序排列
COLLECT???????????????????? 單一行插入,若內表中已有相同主鍵的紀錄,使主鍵以外的數值型項目相加后,合并。(所以要求COLLECT的操作對象內表中,除主鍵以外的項目必須是數值類型(i,p,f))。一般用于定義有主鍵的SORTED TABLE和HASHED TABLE的數值求和等
????????? 行更新
MODIFY???????????? 單一/復數行內容更新。更新語句一般有下述兩種:
?????????????????? 1. Modify table itab from wa
?????????????????? 根據wa的主鍵值進行檢索,更新。
所以不建議無主鍵的內表使用,如STANDARD TABLE。即便使用了,更新的內容也非預期所想的。一般情況下更新內表中的第一條數據。
更新時,若檢索主鍵值存在的情況下,根據檢索主鍵更新。若主鍵值不存在,則不進行更新,結果返回4? ????????
?????????????????? 2. Modify itab index sy-tabix from wa
?????????????????? 根據索引進行檢索,更新。
?????????????????? HASHED TABLE因為沒有索引,該語句不允許被使用。
?????????????????? SORTED TABLE雖然允許使用,但如果被更新紀錄的主鍵已被修改的情況下
?????????????????? 會發生執行錯誤。建議使用1.
?????????????????? 在STANDARD TABLE中會無條件更新,當然前提是該索引存在的情況下。但
?????????????????? 即使索引不存在,也不會發生指針溢出的情況。
????????? 行刪除
DELETE???????????? 單一/復數行刪除。
?????????????????? 與MODIFY相似,可根據主鍵值以及索引進行刪除。
?????????????????? 可多條件刪除,如:DELETE TABLE itab: FROM line,
WITH TABLE KEY col1 = 3.
在使用重復值刪除(ADJACENT DUPLICATES FROM)的時候要注意,重復值指的是相臨的幾條數據之間的重復值比較,而非整個內表中的所有記錄。所以在使用重復值刪除時,最好先根據比較key排一下序。
????????? 表訪問
READ?????????????? 表讀取。讀取內表中符合檢索條件的第一條記錄。
LOOP AT??????????? 循環讀取表紀錄。
?????????????????? at new compN/at end of compN
?????????????????? 含義:
-at new compN:在項目comp1~compN值變化的第一條數據時執行
?????????????????? -at end of compN:在項目comp1~compN擁有相同值的最后一條記錄
???????????????????????????????????? 時執行
?????????????????? 要注意一下幾點:
?????????????????? 1. 關于語句at new compN,不是單單compN值變化時執行的,而是到compN
???????? ???????? 之前的任何一個項目的值發生變化時都會執行。
?????????????????? 2.在at new compN~endat中,有時候不能正常的讀取循環領域的值(*)。
?????????????????? 3.關于GROUP求和(SUM). SUM一般在at end of compN/at last中被使
用。求和結果放在循環領域的同名項目中。SUM求和比較復雜,也不易操作,如同一內表需要對不同的GROUP進行求和的場合,由于1.的原因需要創建與該內表項目名相同但次序不同的多個結構。建議使用COLLECT。
????????? 排序等
SORT?????????????? 按key值升/降排序
?????????????????? STABLE不破壞原有的順序,在原有的順序基礎上排序
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: CLASS ALV Event
- 下一篇: ABAP异常