It may happen that you'll need to do select or loop on a base of the field which is kept in lower case, but you don't know exactly what's the value o field. In such case you may want to build a range of the possible values to be able to fulfill the task. Here is how to do it quite fast by doing FM:
 

function z_ab_prep_val_for_case_search.
*"--------------------------------------------------------------------
*"*"Local Interface:
*"  IMPORTING
*"     VALUE(I_TEXT) TYPE  CSEQUENCE
*"     VALUE(I_SIGN) TYPE  CHAR1
*"     VALUE(I_OPTION) TYPE  CHAR2
*"  EXPORTING
*"     REFERENCE(ER_RANGE) TYPE  STANDARD TABLE
*"--------------------------------------------------------------------
  field-symbols<low> type any.
  field-symbols<sign> type any.
  field-symbols<opt> type any.
  field-symbols<line> type any.
  field-symbols<linenew> type any.
  field-symbols<lownew> type any.
  field-symbols<tab> type standard table.
  dataf_times type i.
  dataf_text type string.
  dataf_textnew type string.
  dataf_insidel type i.
  dataf_insidel2 type i.
  dataft_data type ref to data.

  "create temp table and assign it to FS
  create data ft_data like er_range.
  assign ft_data->to <tab>.

  f_text i_text.

  "get lenght
  f_times strlenf_text ).
  "translate to upper case so we have always same start
  translate f_text to upper case.

  "append initial line to range and put first value into table
  append initial line to er_range assigning <line>.
  check sy-subrc eq 0.
  assign component 'LOW' of structure <line> to <low>.
  check sy-subrc eq 0.
  <low> i_text"all in uppercase
  assign component 'SIGN' of structure <line> to <sign>.
  check sy-subrc eq 0.
  <sign> i_sign.
  assign component 'OPTION' of structure <line> to <opt>.
  check sy-subrc eq 0.
  <opt> i_option.
  translate <low> to upper case.

  "create entries for each other combination of cases
  do f_times times.
    f_insidel2 sy-index 1.
    loop at er_range assigning <line>.
      assign component 'LOW' of structure <line> to <low>.
      check sy-subrc eq 0.
      if f_text+f_insidel2(1ca '*+' and i_option eq 'CP' or i_option eq 'NP' ).

      else.
        append initial line to <tab> assigning <linenew>.
        check sy-subrc eq 0.
        assign component 'LOW' of structure <linenew> to <lownew>.
        check sy-subrc eq 0.
        assign component 'SIGN' of structure <linenew> to <sign>.
        check sy-subrc eq 0.
        <sign> i_sign.
        assign component 'OPTION' of structure <linenew> to <opt>.
        check sy-subrc eq 0.
        <opt> i_option.
        <lownew> <low>.
        f_textnew <lownew>+f_insidel2(1).
        translate f_textnew to lower case.
        <lownew>+f_insidel2(1) = f_textnew.
      endif.
    endloop.
    append lines of <tab> to er_range.
    refresh <tab>[].
  enddo.

endfunction.

 
Example report to use the function:

report  zab_prepare_values_for_cs.

parametersf_char40 type char40.

dataretcodescreen.
rangesr_char40 for f_char40 .

field-symbols<char40> like line of r_char40.

start-of-selection.

  call function 'Z_AB_PREP_VAL_FOR_CASE_SEARCH'
    exporting
      i_text   f_char40
      i_sign   
'I'
      i_option 'CP'
    importing
      er_range r_char40[].

  loop at r_char40 assigning <char40>.
    write:/ <char40>-low.
  endloop.

And it's sample output for f_char40 = abapblog.
 
 
Of course the number of etries in the range grows rapidly so use it with small input string only.
 
Have Fun!

Eclipse Plugins for ABAP

ABAP Favorites

Drag to your running Eclipse* workspace. *Requires Eclipse Marketplace Client

ABAP ADT Extensions

Drag to your running Eclipse* workspace. *Requires Eclipse Marketplace Client

ABAP Quick Fixes

Drag to your running Eclipse* workspace. *Requires Eclipse Marketplace Client