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;