2020-08-23 02:53发布
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
是否可以在select语句的DATS字段上使用LIKE? 还是我可以使用其他运算符? 我正在尝试根据当前年份选择数据,但是"时间戳"字段包含8位数字,我只想根据前四位数字进行选择。
填充2个变量(20200101和20201231)并使用LE和GE会更容易吗?
使用BETWEEN或(LE和GE)范围
是的,您可以在SQL和ABAP的DATS数据类型上使用通配符。
对于使用(SAP)Open SQL的字符数据类型选择条件,实际上有几种选择。
顺便说一句,ABAP词典中的DATS数据类型在ABAP中的行为与在数据库中的有所不同。 尽管在两个系统中这只是一个简单的"字符"数据类型,但在ABAP(Char8)中,通过某些算术运算(例如+/-/MOD),它的功能"更强大",而在Oracle(诸如VARCHAR2和 长度24)。 请参阅此博客,以获取有关ABAP中DATS的操作的更多信息: ABAP中的优雅: 日期计算
乔恩·莫罗佐夫斯基:因此,与您的描述相反, DATS不是"包含8位数字的时间戳字段"。 这是一个有点"特殊"的字符字段,在ABAP中有8个字符,在数据库中可能还有更多。 如果您使用的是十进制类型的"真实"时间戳字段,则通配符将不起作用,但是BETWEEN和LE和GE将起作用,但是初始化条件值会有些棘手。 让我知道您是否对此有疑问。
1。 类似于dats字段(此处必须使用SQL通配符"%"和" _",而不是ABAP通配符" *"和" +")
DATA lv_year TYPE数据。 lv_year = sy-datum(4)&&'%'。 选择 * 从dbtable 进入表lt_table 日期,如lv_year。
2。 在数据字段(或GE和LE)之间
数据lv_year_start TYPE数据。 数据lv_year_end TYPE基准。 lv_year_start = sy-datum(4)&&'0101'。 lv_year_end = sy-datum(4)&&'1231'。 选择 * 从dbtable 进入表lt_table lv_year_start和lv_year_end之间的日期。 "变种之间 "日期GE lv_year_start和日期LE lv_year_end的位置。" GE/LE
3。 在带有CP的dats字段上的RANGE-包含模式(此处使用"常规" ABAP通配符" *"和" +")
数据lr_date类型HEADER LINE的数据范围。 lr_date-sign ='I'。 lr_date-option ='CP'。 lr_date-low = sy-datum(4)&&'*'。 lr_date-high =''。 APPEND lr_date。 选择 * 从dbtable 进入表lt_table 在lr_date的chdat中。
4。 带有BT的dats字段上的RANGE-之间(或带有一个GE选项和一个LE选项)
DATA lr_date类型带标题行的数据范围。 lr_date-sign ='I'。 lr_date-option ='BT'。 lr_date-low = sy-datum(4)&&'0101'。 lr_date-high = sy-datum(4)&&'1231'。 APPEND lr_date。 选择 * 从dbtable 进入表lt_table lr_date中的日期。
请注意,根据您的代码环境(例如,类),我创建范围对象的方式将不起作用,您需要以不同的方式创建它。 出于简化原因,我选择了此编码。
如果替换此行,也不会造成损害:
数据lr_date类型的数据范围(包含标题行)。
with:
数据:lr_date TYPE RANGE OF datum, ls_date就像lr_date的行。
,以便摆脱这种过时且易于出错的HEADER LINE。
最多设置5个标签!
填充2个变量(20200101和20201231)并使用LE和GE会更容易吗?
使用BETWEEN或(LE和GE)范围
是的,您可以在SQL和ABAP的DATS数据类型上使用通配符。
对于使用(SAP)Open SQL的字符数据类型选择条件,实际上有几种选择。
顺便说一句,ABAP词典中的DATS数据类型在ABAP中的行为与在数据库中的有所不同。 尽管在两个系统中这只是一个简单的"字符"数据类型,但在ABAP(Char8)中,通过某些算术运算(例如+/-/MOD),它的功能"更强大",而在Oracle(诸如VARCHAR2和 长度24)。 请参阅此博客,以获取有关ABAP中DATS的操作的更多信息: ABAP中的优雅: 日期计算
乔恩·莫罗佐夫斯基:因此,与您的描述相反, DATS不是"包含8位数字的时间戳字段"。 这是一个有点"特殊"的字符字段,在ABAP中有8个字符,在数据库中可能还有更多。 如果您使用的是十进制类型的"真实"时间戳字段,则通配符将不起作用,但是BETWEEN和LE和GE将起作用,但是初始化条件值会有些棘手。 让我知道您是否对此有疑问。
1。 类似于dats字段(此处必须使用SQL通配符"%"和" _",而不是ABAP通配符" *"和" +")
2。 在数据字段(或GE和LE)之间
3。 在带有CP的dats字段上的RANGE-包含模式(此处使用"常规" ABAP通配符" *"和" +")
4。 带有BT的dats字段上的RANGE-之间(或带有一个GE选项和一个LE选项)
请注意,根据您的代码环境(例如,类),我创建范围对象的方式将不起作用,您需要以不同的方式创建它。 出于简化原因,我选择了此编码。
如果替换此行,也不会造成损害:
with:
,以便摆脱这种过时且易于出错的HEADER LINE。
一周热门 更多>