Subscribe for automatic updates: RSS icon RSS

Login icon Sign in for full access | Help icon Help
Advanced search

Pages: [1]
  Reply  |  Print  
Author Topic: Ask Reuben 3 - Append (,) or Concatenate (||)  (Read 3827 times)
Reuben B.
Four Js
Posts: 1010

« on: April 14, 2020, 02:18:06 am »

What should I use to join two or more strings together? Append (,) or Concatenate (||) ?

A question I have been asked a few times, is it better to use append (,) or concatenate (||) to join two strings together?

The quick answer is what result do you expect if one of the operands is NULL.  With concatenation (||), if one of the operands is NULL then the result will be NULL as well.  So for a quick test, note difference in output of ...

However the answer I like to give back is that are you aware that there is a 3rd option?, that is the SFMT operator.  IMHO this leads to code that is easier to read.


Product Consultant (Asia Pacific)
Developer Relations Manager (Worldwide)
Author of
Contributor to
Rene S.
Four Js
Posts: 108

« Reply #1 on: April 14, 2020, 12:28:35 pm »

Ask different:
Why do two distinct forms of string concatenation exist? 1st: ',' and 2nd: '||'

The first form of string concatenation is a statement:
LET string-variable = expr ( ',' expr )...
Read as: "LET string-variable = comma separated expression list"

The second form of string concatenation is an expression:
This is a fragment of the expression grammar:
expr := expr '||' expr
The concatenation result can directly be used wherever 4gl accepts expressions (example: function parameters).

Another remark:
The first form of the string concatenation produces a formatted string: numeric, date, date-time, interval and char() operands will be formatted with a fix width. See the print statement of reports. The first form of the string concatenation has the same semantics as the print statement.
Leo S.
Four Js
Posts: 121

« Reply #2 on: April 14, 2020, 12:55:04 pm »

Like Reuben I personally avoid the concat operator due to the NULL semantics.
If one still does, use the NVL() operator to avoid the NULL pitfall.
  1. CONSTANT c="hello"
  2. MAIN
  4.  CALL echo(c||":"||NVL(a,"a is NULL"))
  7. FUNCTION echo(s STRING)
  8.  DISPLAY s
Pages: [1]
  Reply  |  Print  
Jump to:  

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines