devxlogo

SP to Obtain a Substring

SP to Obtain a Substring

Question:
How do I create a stored procedure to obtain a substring of a char field from the first “[” encountered until the last-1 character?

For example, I have a table named my_table with a field, field1 char(50):

  • First row: field1 = “AAA [BBB CCC]”
  • Second row: field1= “ABEDS [WAS WEE SS]”
  • Third row: “W [BBBGGG FFF]

The result I need is:

BBB CCCWAS WEE SSBBBGGG FFF

with the select:

SELECT my_procedure(field1) FROM mytable

Answer:
The following SP will illustrate how it’s done with an engine after version 7.30. If your engine doesn’t support the substr() expression, you’ll have to do the same thing with the rowname[x,y] syntax. Anyway, this SP does no error checking, so that needs to be added. We’ll leave that “up to the student to enhance.”*******************************************

DROP PROCEDURE bracket;CREATE PROCEDURE bracket (inline char(50))RETURNING char(50) ;DEFINE myline char(50);DEFINE hold_line char(50);DEFINE left_marker char(1);DEFINE right_marker char(1);DEFINE line_ct int;DEFINE myspot int;DEFINE leftspot int;DEFINE rightspot int;LET left_marker = "[";LET right_marker = "]";LET myline = inline;LET line_ct = length(myline);FOR myspot in (1 to 50 step 1)IF substr(myline,myspot,1) = left_marker THEN   LET leftspot = myspot + 1;END IF;END FOR;FOR myspot in (leftspot to 50 step 1)IF substr(myline,myspot,1) = right_marker THEN   LET rightspot = myspot;END IF;END FOR;RETURN substr(myline,leftspot,rightspot - leftspot);END PROCEDURE;

devx-admin

Share the Post: