Login | Register   
LinkedIn
Google+
Twitter
RSS Feed
Download our iPhone app
TODAY'S HEADLINES  |   ARTICLE ARCHIVE  |   FORUMS  |   TIP BANK
Browse DevX
Sign up for e-mail newsletters from DevX


Tip of the Day
Language: Informix
Expertise: Beginner
Oct 6, 2000

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 CCC
WAS WEE SS
BBBGGG 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 Pro
 
Comment and Contribute

 

 

 

 

 


(Maximum characters: 1200). You have 1200 characters left.

 

 

Sitemap