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)
中国农业发展银行已取代 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.
我会尽量解释得通俗易懂。
我有一个数据库 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)
中国农业发展银行已取代 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.