我可以在DATS字段上使用LIKE吗?

2020-08-23 02:53发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


是否可以在select语句的DATS字段上使用LIKE? 还是我可以使用其他运算符? 我正在尝试根据当前年份选择数据,但是"时间戳"字段包含8位数字,我只想根据前四位数字进行选择。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


是否可以在select语句的DATS字段上使用LIKE? 还是我可以使用其他运算符? 我正在尝试根据当前年份选择数据,但是"时间戳"字段包含8位数字,我只想根据前四位数字进行选择。

付费偷看设置
发送
4条回答
Bunny_CDM
1楼 · 2020-08-23 03:29.采纳回答

填充2个变量(20200101和20201231)并使用LE和GE会更容易吗?

梦想连接
2楼-- · 2020-08-23 03:32

使用BETWEEN或(LE和GE)范围

jovirus
3楼-- · 2020-08-23 03:41

是的,您可以在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中的日期。
 

请注意,根据您的代码环境(例如,类),我创建范围对象的方式将不起作用,您需要以不同的方式创建它。 出于简化原因,我选择了此编码。

Nan4612
4楼-- · 2020-08-23 03:29

如果替换此行,也不会造成损害:

数据lr_date类型的数据范围(包含标题行)。

with:

数据:lr_date TYPE RANGE OF datum,
       ls_date就像lr_date的行。

,以便摆脱这种过时且易于出错的HEADER LINE。

一周热门 更多>