Перейти к основному содержимому
Версия: 7.0

Строковые операторы (+, CONCAT)

Строковые операторы - операторы, параметрами и результатом которых являются свойства, значения которых являются экземплярами строковых классов. В платформе на данный момент поддерживаются следующие строковые операторы:

ОператорНазваниеОписаниеПримерРезультат
+, CONCATОбъединениеВозвращает строку, полученную объединением строк операндов'a' + 'b''ab'

Оператор + возвращает NULL, если один из операндов NULL. Для оператора CONCAT значение NULL в операнде эквивалентно пустой строке (но объединение операндов, все из которых равны NULL, все равно возвращает NULL). Операнды при этом соединяются разделителем, который вставляется только между операндами, не равными NULL. Например CONCAT ' ', 'John', 'Smith' = 'John Smith', а CONCAT ' ', 'John', NULL = 'John'.

Определение класса результата​

Класс результата определяется как:

ОператорОписание
+, CONCATresult = STRING[p1.blankPadded AND p2.blankPadded, p1.caseInsensitive OR p2.caseInsensitive, p1.length + p2.length]

где blankPadded, caseInsensitive и length определяются аналогично правилам построения общего предка для двух встроенных классов (семейство - Строки). Для CONCAT длина результата также включает разделитель, вставляемый между операндами.

В операторе + операнды, классы которых отличны от строк, приводятся к строкам в соответствии со следующей таблицей:

КлассПриведенный класс
DATE, DATETIME, TIMESTRING[25]
NUMERICSTRING[p.length]
LOGICALSTRING[1]
FILETEXT
ОбъектSTRING[10]
ОстальныеSTRING[8]

Если какой-либо операнд принадлежит классу строк неограниченной длины TEXT (или одному из его вариантов, например форматированному или HTML-тексту), результатом является этот текстовый класс, а не строка фиксированной длины.

Язык​

Оператор суммирования объединяет строки, когда хотя бы один операнд является строкой — см. арифметические операторы.

Для объединения нескольких значений с разделителем, вставляемым только между операндами, не равными NULL, используется оператор CONCAT.

Примеры​

CLASS Person;
firstName = DATA STRING[100] (Person);
middleName = DATA STRING[100] (Person);
lastName = DATA STRING[100] (Person);

// если какая-то часть имени не задана, то эта часть будет пропущена вместе с пробелом
fullName(Person p) = CONCAT ' ', firstName(p), middleName(p), lastName(p);