Перейти к основному содержимому
Версия: 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);