Строковые операторы (+, 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'
.
Определение класса результата
Класс результата определяется как:
Оператор | Описание |
---|---|
+ , CONCAT | result = 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 , TIME | STRING[25] |
NUMERIC | STRING[p.length] |
LOGICAL | STRING[1] |
FILE | TEXT |
Объект | 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);