利用 NATIVE SQL 实现不区分供应商名字大小写进行模糊查询

公司有个需求 ,当按用英文名字来进行查询时,可以实现不区分供应商名字大小写进行模糊查询。

例如:如果用户输入'br' 那么可以查出名字含有 'BR'、'bR'、'Br' 、'br' 的供应商来。利用SAP 常规的 Open SQL 是实现不了的。 只能利用 Native SQL 语句。

在SAP 官网有这个资料,同学们可以过去学习一下:

Native SQL (SAP Library - ABAP Programming (BC-ABA))

我首先测试了下面种方式,这种方式可以写在 ABAP 程序里,但写在RFC不行。

Native SQL Statements in ABAP Programs

复制代码
REPORT demo_native_sql.

DATA: BEGIN OF wa,
        connid   TYPE spfli-connid,
        cityfrom TYPE spfli-cityfrom,
        cityto   TYPE spfli-cityto,
      END OF wa.

DATA c1 TYPE spfli-carrid VALUE 'LH'.

EXEC SQL PERFORMING loop_output.
  SELECT connid, cityfrom, cityto
  INTO   :wa
  FROM   spfli
  WHERE  carrid = :c1
ENDEXEC.

FORM loop_output.
  WRITE: / wa-connid, wa-cityfrom, wa-cityto.
ENDFORM.

然后我用了游标的方式。

复制代码
DATA: BEGIN OF ls_lfa1,
        lifnr TYPE lfa1-lifnr,
        name1 TYPE lfa1-name1,
        "mcod1 TYPE lfa1-mcod1,
      END OF ls_lfa1.
DATA: lt_lfa1 LIKE TABLE OF ls_lfa1.
  DATA: search_term TYPE string.

  IF i_name  is not INITIAL .


  search_term =  |%{ to_lower( i_name ) }%|.
*

"  利用  NATIVE  SQL  进行 按供应商名字不区分大小写查询
  EXEC SQL.
    OPEN c1 FOR
   SELECT lifnr, name1 

      FROM lfa1
   WHERE LOWER(name1) LIKE :search_term
   and   MANDT = :SY-MANDT
  ENDEXEC.
  DO.
    EXEC SQL.
      FETCH NEXT c1 INTO :ls_lfa1
    ENDEXEC.
    IF sy-subrc <> 0.
      EXIT.
    ELSE.
      APPEND ls_lfa1 TO lt_lfa1.
    ENDIF.
  ENDDO.
  EXEC SQL.
    CLOSE c1
  ENDEXEC.

  ENDIF.

最后结果呈现如下: 用户输入 br

相关推荐
Code季风1 小时前
SQL关键字三分钟入门: 表结构管理与分区设计。(ALTER、MODIFY、CHANGE、DEFAULT、VALUES、LESS THAN、RANGE)
数据库·sql·less
不恋水的雨3 小时前
数据库char字段做trim之后查询很慢的解决方式
数据库·sql
远方16099 小时前
47-Oracle ASH报告解读
数据库·sql·oracle·database
怪只怪满眼尽是人间烟火14 小时前
SQL分片工具类
网络·数据库·sql
Lx35218 小时前
EXPLAIN工具:查询执行计划分析与索引诊断
sql·mysql·性能优化
kingbal19 小时前
MySQL:要删除子查询所涉及表中的数据,直接使用原 SQL 会报错
数据库·sql·mysql
java1234_小锋19 小时前
MyBatis中的动态SQL是什么?
java·sql·mybatis
远方16091 天前
43-Oracle 系统视图一览
数据库·sql·oracle·database
咚咚咚小柒1 天前
SQL基础知识,MySQL学习(长期更新)
数据库·sql·mysql·database
不恋水的雨1 天前
解决sql查询中in查询项过多时很慢的问题
数据库·sql·mysql