The functions discussed in the previous article allow you to add, replace, and remove characters from a string. While this is interesting and somewhat useful, being able to “stitch” two strings together is usually more useful. This article covers a group of functions that helps with that task.
You are probably familiar with MS Excel’s LEFT and RIGHT functions. LEFT and RIGHT allow you to extract the leftmost or rightmost n characters of a string. Most people know these functions but are not aware that there’s another one, named MID, that would be the long-lost twin brother of RPG’s %SUBSTR BIF if this were a soap opera. Well, LEFT and RIGHT also exist in SQL, along with the equivalent to the %SUBSTR BIF. While the following paragraphs won’t bring a lot of new information, I recommend you read them carefully, because I’ll use these functions in the “Embedding SQL in Your RPG Code” subseries as well as later in this series and also because they have some interesting details you might not be aware of.
Let’s begin with LEFT; just like its MS Excel namesake, LEFT returns the leftmost n characters of a given string. The following statement…
SELECT LEFT(‘THIS IS A TEST‘, 7)
…returns ‘THIS IS’ because I specified a 7 in the function’s second parameter, thus indicating that I wanted the first (or leftmost) 7 characters of the input string. You can probably guess what happens when I use the RIGHT function with the same parameters:
SELECT RIGHT(‘THIS IS A TEST‘, 7)
The system will return ‘ A TEST’ because those are the last (or rightmost) 7 characters of the input string. Of course, you can always use SQL’s SUBSTR function for the same purpose; you just need to adjust the parameters accordingly. Just like MS Excel’s MID function, SUBSTR has three parameters: input string, start position, and length to extract. Now I’ll indicate that I want to start in position 1 and that my intention is to extract 7 characters:
SELECT SUBSTR(‘THIS IS A TEST‘, 1, 7)
I’ll be getting the same ‘THIS IS’ string that the sample statement with the LEFT function produced. Slightly trickier is emulating the RIGHT function with SUBSTR because you need to know the length of the string in order to determine where to start extracting. For that, SQL has a LENGTH function, similar to its RPG’s %LEN; simply indicate a literal string, a field, or an expression and the system returns the length, in characters, of it. So I can use SUBSTR and LENGTH together in a little function-nesting example to emulate the RIGHT function’s functionality:
SELECT SUBSTR(‘THIS IS A TEST‘, LENGTH(‘THIS IS A TEST’) - 6, 7)
Such an expression is always evaluated from the inside out, i.e., the innermost function is evaluated first, its result is passed to the function that uses that innermost function as parameter, and so on, until the whole expression can be evaluated. In this case, this means that the system will calculate the expression LENGTH(‘THIS IS A TEST’) – 6 before performing the SUBSTRING operation. As expected, the final output is the same ‘ A TEST’ string that the aforementioned RIGHT function produced.
LEFT, RIGHT, and SUBSTR allow you to extract parts of a string. That covers the first part of “stitching” strings together. The actual stitching process can be easily performed with SQL’s concatenation operator—aka double pipe (||)—or the CONCAT function. Here’s an example that covers both methods:
SELECT ‘THIS IS A ‘ || ‘TEST‘
, CONCAT(‘THIS IS A ‘, ‘TEST‘)
Both operations return the exact same thing: ‘THIS IS A TEST‘. While the first method is similar to RPG’s concatenation method (simply replace the double pipe with a plus sign and you have RPG’s concatenation operation), the second one likens MS Excel’s Concatenate function. I usually use the double pipe, because of its similarity to RPG, but feel free to use whichever you prefer; the result will be the same.
This concludes the SQL string-related functions (not-so-brief) overview. I didn’t cover all the available functions, just the ones I think are the most useful. I’ll move on to the date-related functions, with the same approach: covering the most interesting with reasonable depth and a few examples.
If the examples provided were not enough to clear your doubts, use the comments section; I’ll try to help with additional examples and/or explanations.
About the Author: Rafael Victória-Pereira
Just what is Bluemix, and what could it mean for you? An interview with an IBMer reveals the answers.
Written by Steve Pitcher
Last week, I sat down with Adam Gunther, Director of Cloud Developers Services at IBM, to talk about IBM Bluemix. I told Adam I wasn’t a developer up front, but I wanted him to explain just exactly how my small-to-medium-sized business with an investment in on-premises infrastructure could really take advantage of Bluemix. I wasn’t disappointed.
MQ on IBM i continues to adapt to the needs of modern IT environments.
Written by Andrew Schofield
IBM MQ has been a familiar part of the corporate IT landscape for over 20 years. It’s been through a few name changes, but the fundamental idea of using asynchronous messaging to decouple communication between applications is as important now as it has ever been. Of course, over such a long period of time, there have been huge changes—in particular, the way that developers work using the Internet and open-source, and the rise of cloud computing. Therefore, we at IBM are doing many things in MQ to make sure that existing systems remain relevant and able to interact with the latest tools and platforms.
Linear-main RPG programs eliminate the RPG logic cycle and add new levels of variable scoping to protect your code from bugs down the road.
Written by Brian May
While I am no expert in the RPG logic cycle, I have had to deal with it in older applications over the years. Most RPG developers have dealt with a logic cycle program at least once. I can honestly say I have never written a new logic cycle program, but I have seen others in the community doing it. This article is not intended to start a religious war about cycle programming. There are some who will never give it up. Instead, this article will demonstrate how to create a program without the logic cycle and concentrate on what I think is a very useful benefit to using linear-main procedures in program.