Regex in where

Alles rund um die Sprache ABAP®: Funktionsbausteine, Listen, ALV
8 Beiträge • Seite 1 von 1
8 Beiträge Seite 1 von 1

Regex in where

Beitrag von edwin (Specialist / 306 / 10 / 68 ) »
Hi,
habe ein Problem bei einer where Bedingung - gegeben eine Tabelle mit einem Textfeld, in dem Werte mit Leerzeichen getrennt vorkommen können, ich möchte direkt bei der "where" Bedingung die Spaces mit '' ersetzen ( den Wert verdichten wie condense ), leider ist das wohl so nicht möglich, hat jemand eine Idee ?
Beispielcode:

Code: Alles auswählen.

   SELECT  z~guid,
           z~ktext,
           replace_regexpr( pcre = '[[:space:]]',
                            value = z~ktext,
                            with = '' ) AS ktext_condensed
           FROM  ztable AS z
           WHERE replace_regexpr( pcre = '[[:space:]]', "condense in where
                            value = z~ktext,
                            with = '' ) = @pm_text 
           INTO TABLE @DATA(data_tab).
Fehler : "In einem Datenbankausdruck darf nicht das leere Zeichenliteral verwendet werden. Benutzen Sie ein Literal, welches genau ein Leerzeichen enthält."

with = 'irgendeinzeichen' ... alles funktioniert, nur nicht '', bisher habe ich das mit AMDP gelöst, allerdings ist da die Performance bescheiden

CDS - "replace" funktioniert nicht, da passiert einfach nichts

Code: Alles auswählen.

...
    replace( z.ktext, ' ' ,'' ) as ktext_condensed,   
...

Grüße Edwin

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: Regex in where

Beitrag von black_adept (Top Expert / 4103 / 128 / 945 ) »
Moin Edwin,

jetzt ohne System nur geraten: Versuch mal mit den Backticks einen String statt eines char zu definieren. Also

Code: Alles auswählen.

...
    replace( z.ktext, ' ' ,`` ) as ktext_condensed,   
...
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Regex in where

Beitrag von edwin (Specialist / 306 / 10 / 68 ) »
habe ich auch schon versucht
CDS:
RegexScreenShot.jpg
ABAP:

Code: Alles auswählen.

           replace_regexpr( pcre = '[[:space]]+',
                            value = z~text,
                            with = `` ) AS text_condensed
RegexScreenShot2.jpg

Re: Regex in where

Beitrag von tar (Specialist / 108 / 22 / 31 ) »
https://userapps.support.sap.com/sap/su ... en/3443644

Ich kann den Hinweis leider nicht lesen, aber vielleicht gibt es dazu einen Lösungsvorschlag.

Re: Regex in where

Beitrag von edwin (Specialist / 306 / 10 / 68 ) »
leider keine Lösung, Hinweis :
Auflösung
Ein einzelnes Leerzeichen kann nicht als Argument übergeben werden. Sie wird in eine leere Zeichenfolge konvertiert.
von da wird auf die Hilfe verwiesen:
REPLACE( arg1, arg2, arg3 ) String arg1, in which all instances of arg2 are replaced by the content from arg3. The replacement of letters is case-sensitive. Trailing blanks are ignored in all arguments. The maximum length of the result is 1333.
Grüße Edwin

Re: Regex in where

Beitrag von tar (Specialist / 108 / 22 / 31 ) »
Es geht über Native SQL:

Code: Alles auswählen.

types:
  begin of lty_row,
    spras   like t005t-spras,
    landx50 like t005t-landx50,
  end of lty_row.

data:
  lt_table type standard table of lty_row with default key,
  ls_row   type lty_row.

exec sql performing adopt_entry.
  select spras, landx50
    into :ls_row-spras,
         :ls_row-landx50
    from t005t
   where mandt   = :sy-mandt
     and landx50 = 'Costa Rica'
endexec.

break-point. " check lt_t005t

form adopt_entry.
  replace all occurrences of ` ` in ls_row-landx50 with space.
  append ls_row to lt_table.
endform.
Aber dann kannst du es auch gleich so machen:

Code: Alles auswählen.

types:
  begin of lty_row,
    spras   like t005t-spras,
    landx50 like t005t-landx50,
  end of lty_row.

data lt_table type standard table of lty_row with default key.

select  spras, landx50
  into  @data(ls_row)
  from  t005t
  where landx50 = 'Costa Rica'.
  replace all occurrences of ` ` in ls_row-landx50 with space.
  append ls_row to lt_table.
endselect.
Von den Spaces abhängige Where-Filterungen dann natürlich jeweils vor dem Replace/Append.

Ich gehe davon aus, dass auch hier die Performance bescheiden sein dürfte, weil der Select ja beständig unterbrochen wird. Schneller dürfte es sein, einfach alles auf einmal zu holen und nachträglich die interne Tabelle zu filtern und anzupassen.

Re: Regex in where

Beitrag von edwin (Specialist / 306 / 10 / 68 ) »
Hi,
die Idee war ja, das direkt in der where Bedingung einzubauen

Code: Alles auswählen.

...
           WHERE replace_regexpr( pcre = '[[:space:]]', "condense in where
                            value = z~ktext,
                            with = '' ) = @pm_text 
...
was ja mit anderen Zeichen funktioniert, nur '' (condense) ist ein Problem
Grüße Edwin

Re: Regex in where

Beitrag von tar (Specialist / 108 / 22 / 31 ) »
Ja, das geht eben nicht direkt, nur so:

Code: Alles auswählen.

select  spras, landx50
  into  @data(ls_row)
  from  t005t.
  replace all occurrences of ` ` in ls_row-landx50 with space.
  if ls_row-landx50 = |CostaRica|. " where condition
    append ls_row to lt_table.
  endif.
endselect.

Seite 1 von 1

Vergleichbare Themen

12
Antw.
9961
Views
Regex für /xA0
von Thomas R. » 13.11.2013 12:13 • Verfasst in ABAP® für Anfänger
13
Antw.
6565
Views
REGEX - CX_SY_INVALID_REGEX
von nickname8 » 23.04.2018 13:49 • Verfasst in ABAP® Core
17
Antw.
4905
Views
Regex in FIND
von hugo.data » 22.10.2018 15:33 • Verfasst in ABAP® für Anfänger
2
Antw.
2472
Views
Suchmuster mit Regex
von crishi_crd » 15.05.2014 08:19 • Verfasst in ABAP® für Anfänger
1
Antw.
2371
Views
XML Parser mit REGEX
von Adrian » 27.12.2013 09:23 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag



Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor einer Woche von rob_abc gelöst 8 / 8578
ABAP - Mail so10 Text
vor einer Woche von retsch 6 / 2474
selection-screen comment mit icon
vor einer Woche von DeathAndPain 9 / 3783

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.

Aktuelle Forenbeiträge

Nach MESSAGE TYPE E Felder entsperren
vor einer Woche von rob_abc gelöst 8 / 8578
ABAP - Mail so10 Text
vor einer Woche von retsch 6 / 2474
selection-screen comment mit icon
vor einer Woche von DeathAndPain 9 / 3783

Unbeantwortete Forenbeiträge

SD_PRINT_TERMS_OF_PAYMENT
vor einer Woche von Manfred K. 1 / 2884
BUSOBJEKT zu CMIS PHIO ermitteln
vor 4 Wochen von snooga87 1 / 4690