我有一个允许多个ID的输入。可以这样输入:
[ 1000, 1001, 1050-1060, 1100 ]
从此输入字符串中,我想获取所有单个ID。我已经发现每个之后都可以拆分,
,因此具有1000、1001的部分已经可以使用。
data : itab TYPE TABLE OF string,
SPLIT l_bukrs_string AT ';' INTO TABLE itab.
我的问题是自建范围。知道如何将其与上面的情况结合起来以将1050-1060拆分为单个值吗?
我要1050 | 1051 | 1052 | ... | 1060。
感谢所有提示:)非常感谢!
最简单的解决方案是改为对用户(?)输入使用实际范围/选择选项。然后,您将使用该范围从数据库表中选择每个值。
如果您不能使用实际范围/选择选项,则可以将字符串转换为一个,如下所示。
DATA: bukrs_string TYPE string,
split_bukrs TYPE TABLE OF string,
bukrs TYPE bukrs,
bukrs_between TYPE TABLE OF bukrs,
bukrs_range TYPE RANGE OF bukrs,
bukrs_rline LIKE LINE OF bukrs_range,
bukrs_table TYPE TABLE OF bukrs.
FIELD-SYMBOLS: <string> TYPE string,
<bukrs> TYPE bukrs,
<bukrs_from> TYPE bukrs,
<bukrs_to> TYPE bukrs.
bukrs_string = '1000, 1001, 1050-1060, 1100'.
CONDENSE bukrs_string NO-GAPS.
SPLIT bukrs_string AT ',' INTO TABLE split_bukrs.
LOOP AT split_bukrs ASSIGNING <string>.
bukrs_rline-sign = 'I'.
IF <string> CA '-'.
SPLIT <string> AT '-' INTO TABLE bukrs_between.
bukrs_rline-option = 'BT'.
READ TABLE bukrs_between INDEX 1 ASSIGNING <bukrs_from>.
bukrs_rline-low = <bukrs_from>.
READ TABLE bukrs_between INDEX 2 ASSIGNING <bukrs_to>.
bukrs_rline-high = <bukrs_to>.
ELSE.
bukrs_rline-option = 'EQ'.
bukrs = <string>.
bukrs_rline-low = bukrs.
ENDIF.
APPEND bukrs_rline TO bukrs_range.
CLEAR bukrs_rline.
ENDLOOP.
SELECT bukrs
FROM t001
INTO TABLE bukrs_table
WHERE bukrs IN bukrs_range.
在分割字符串之前,您需要压缩它以删除所有空格。然后,您将遍历结果部分,并检查其是否包含任何“-”。如果是这种情况,请再次拆分它并在您的范围内创建一个BETWEEN条目(考虑是否可能需要进行其他检查,以查看后者的数字是否实际上更高)。如果没有“-”,则只需创建一个EQUAL条目。
拥有实际范围后,就可以使用它来从数据库中进行选择。这是因为并非该范围内的每个骗子都必须存在。例如,您可能只有1000、1050、1055和1060。
编辑:之所以没有命令,功能模块或类来将范围转换为单个值,是因为需要执行的操作根据范围所针对的数据以及是否/需要验证多少值而发生重大变化。如果您有一个整数范围,那么您所要做的就是取起始值并将其加1,直到达到目标值。一系列二进制浮点数呢?各种颜色呢?那么您的公司代码范围又如何呢?这就是为什么必须手动完成转换的原因。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句