You have no idea what “stringscaping” is, do you? Well, it’s the not-so-old-because-it-was-just-invented art of landscaping strings. SQL allows you do that with a nice set of user-friendly functions.
If you want to landscape your garden, you use pruning shears and hedge clippers, right? Well, if you want to landscape your strings (or, as I called it, “stringscaping”), you use the SQL functions I’ll cover in this article and the next.
I showed how you can remove characters from strings in the previous article of this series; you’re probably removing some characters, like the blank space, from your strings using RPG’s %TRIM. SQL provides an interesting group of scalar functions that provide %TRIM’s functionality and more. Let’s start with SQL’s TRIM function.
TRIM is arguably the most complete and easier to use. The typical use for this function is removing blanks from the left (leading) or right (trailing) side of a string. Actually, there are specialized functions for this: LTRIM and RTRIM, respectively. However, with TRIM you can selectively remove any leading and/or trailing characters that you choose. This flexibility is achieved via a flexible parameter list; TRIM has three parameters—where to look for the character to remove, the character to remove, and the string to act upon.
Let’s start with the first parameter; by default (i.e., if you don’t specify it), TRIM will look for the character to remove in both ends of the string. The character to remove is a single character constant, and if you omit it, it defaults to a blank space. The string to act upon is mandatory, and it doesn’t have to be a CHAR data type field; it can also be a VARCHAR, CLOB, GRAPHIC, VARGRAPHIC, DBCLOB, BINARY, VARBINARY, or BLOB data type field. If these data types are unfamiliar to you, please refer to IBM’s DB2 for i Reference’s Chapter 2. Language Elements for details. Let’s stick to strings and look at a few examples. You’ve probably seen the most common:
SELECT TRIM(‘ TEST ‘)
This statement returns ‘TEST’ because the leading and trailing blanks are removed. This is the direct effect of omitting the first two parameters of the function. Now let’s complicate things a bit:
SELECT TRIM(L FROM ‘ TEST ‘)
This statement returns ‘TEST ‘. Why? Notice the L FROM before the string? Well, the L (short for Leading) is a keyword specified for the first parameter, and it can be an L, LEADING, T, TRAILING, B, or BOTH keyword. This first parameter tells the database engine where to look for the character to replace (which is omitted in this example). The FROM that follows the first parameter is mandatory only if you specify one of the keywords mentioned before. By the way, the statement above produces the same output as this one:
SELECT LTRIM(‘ TEST ‘)
If I do the same thing for the trailing characters, replacing the L with a T…
SELECT TRIM(T FROM ‘ TEST ‘)
…the returned string is ‘ TEST’ and RTRIM does the exact same thing:
SELECT RTRIM(‘ TEST ‘)
But I said that TRIM’s functionality goes beyond removing blank spaces. Let’s see how this is achieved in the next example:
SELECT TRIM(BOTH ‘T’ FROM ‘TEST‘)
By specifying the character-to-remove parameter in conjunction with the BOTH option, I’m telling the system to remove the Ts from both ends of the string, thus producing the ‘ES‘ output. Sounds nice, doesn’t it? Being able to remove unwanted characters easily can help speed up querying, as well as in-program data-handling, as you’ll see later.
But there are times when you want to add characters instead of removing them. SQL provides two functions for that—LPAD and RPAD; note, however, that these two functions were introduced in V7R2. These functions are the opposite of the LTRIM and RTRIM but allow you to specify how many characters to pad—that’s what the second parameter, length, is for—and also the character to use for the padding—that’s the third parameter, pad. I neglected to mention that the first parameter is the string that’s going to be acted upon. Let’s do a quick RPAD example to consolidate all this information:
SELECT RPAD(‘TEST‘, 10, ‘!’)
The output is going to be ‘TEST!!!!!!’ because I’m telling the system that my total length is ten characters and ‘TEST’ is already taking four of those ten. The other six are padded using the character to use for padding the exclamation mark (‘!’).
Now that I’ve initiated you into the fine art of stringscaping, the next installment of the series will continue to explore this “art,” with a group of SQL functions designed to extract parts of a string and “glue” them back together—more stringscaping.