SELECT 按类型为 STRING 的列

SELECT by column of type STRING

我会尽量解释得通俗易懂。

我有一个数据库 table 'DB_JOURNAL' 只有 2 列 'Date' 和 'Journal' 类型 String.

示例:

01.01.2020 | I played football.

02.02.2020 | I played basketball

我想写一个 Select 语句并在查询中搜索 字符串 。 就像搜索足球这个词一样。

Select * from DB_JOURNAL into table lt_journal
       where journal like '%football%'.

这在 ABAP 中是不允许的:

The field "JOURNAL" is a long string or a text and cannot be used in the WHERE condition.

有什么解决办法吗?

您确定 "Journal" 列是字符串类型吗? 您能否将其更改为某些现有数据元素 CHAR40 或其他内容...

也可以考虑使用

Select * from DB_JOURNAL into CORRESPONDING FIELDS OF table lt_journal where journal like '%football'.

唯一的解决方案是使用 native SQL,即您的数据库的 SQL。

原生 SQL 可以 运行 多种口味。

最短但也是最旧的代码(SAP 建议不要使用它)是语句 EXEC SQL:

DATA text TYPE string.
EXEC SQL PERFORMING sr.
  SELECT text FROM sotr_textu INTO :text WHERE text LIKE '%e%'
ENDEXEC.
FORM sr.
  WRITE / text.
ENDFORM.

注意:上面的代码适用于 HANA、MSSQL 和 Oracle 数据库,但您需要将 table 和列名称设置为大写的 MaxDB。

更复杂的查询示例:

DATA: text   TYPE string,
      status TYPE string.

status = 'R'.

TRY.
    EXEC SQL PERFORMING sr.
      SELECT TEXT FROM SOTR_TEXTU INTO :text
           WHERE  STATUS  = :status
             AND  TEXT    LIKE '%e%'

    ENDEXEC.
  CATCH  cx_sy_native_sql_error INTO DATA(exc).
    cl_demo_output=>display( exc->get_text( ) ).
ENDTRY.
FORM sr.
  WRITE / text.
ENDFORM.

对于不区分大小写的搜索:

 AND  UPPER(TEXT) LIKE UPPER(:text)

其他方式是ADBC and AMDP.

中国农业发展银行已取代 EXEC SQL

避免 Sandra 提出的 Native SQL 的唯一方法是使用循环 SELECT:

DATA: lt_journal TYPE TABLE OF db_journal WITH EMPTY KEY.

SELECT *
 FROM DB_JOURNAL
 INTO @DATA(wa).
 CHECK wa-journal CP '*football*'.
 APPEND wa TO lt_journal.
ENDSELECT.