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

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

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

ОператорНазваниеОписаниеПримерРезультат
+, CONCATОбъединениеПринимает два операнда на вход, и возвращает строку, полученную объединением строк, указанных в операндах'a' + 'b''ab'
SUBSTRINGПодстрокаПринимает три операнда на вход, возвращает подстроку, полученную из строки, указанной в первом операнде, начиная с символа, указанного во втором операнде, и длины, указанной в третьем операндеSUBSTRING('abc', 2, 2)'bc'

Операторы + и SUBSTRING возвращают NULL, если один из операндов NULL. Для оператора CONCAT значение NULL в операнде будет эквивалентно пустой строке (но объединение двух NULL значений все равно возвращает NULL). Также, в операторе CONCAT, можно дополнительно указывать третий операнд (разделитель), который будет вставляться тогда и только тогда, когда оба операнда не 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]
SUBSTRING(p, from, length)result = STRING[p.blankPadded, p.caseInsensitive, length]

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

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

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

Примеры

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);