Скалярные функции

  • Часть 1
  • | 2
  • | 3
  • | 4
  • | 5
  • | 6
  • | 7

Строковые функции

Эти функции используют в качестве аргумента строку символов, а в качестве результата возвращают также символьную строку или числовое значение.

Для выделения подстроки указанной длины из строкового выражения, начиная с заданной позиции, используется функция SUBSTRING, имеющая следующий формат:

SUBSTRING (<строковое_выражение> FROM позиция[FOR длина]), где позиция – позиция, начиная с которой выполняется выделение, например 1 для первого символа в строке;

длина – количество выделяемых символов. Например, для вывода номеров лицевых счетов абонентов и первых трех символов их фамилии можно использовать следующий запрос:

SELECT A.AccountCD, SUBSTRING (A.Fio FROM 1 for 3) AS Fio3 FROM Abonent A;. Результат выполнения запроса представлен на рис. 3.19.

ACCOUNTCD

FIO3

АКС

МИЩ

КОН

ТУЛ

СВИ

СТА

ШМА

МАР

ДЕН

ЛУК

ШУБ

ТИМ

005488

115705

015527

443690

136159

443069

136160

126112

136169

080613

080047

080270

Рис. 3.19. Результат работы функции SUBSTRING

Следует отметить, что в качестве аргументов позиция и длинав SUBSTRING можно использовать и выражения (в том числе со скалярными функциями, возвращающими числовой результат). Также в качестве аргументов SUBSTRING могут использоваться подзапросы, возвращающие единственное значение (<скалярный_подзапрос>).

Следует учесть, что длина результата будет такой же, как и длина первого аргумента (<строковоевыражение>, из которого выделяются символы). Длина поля Fio таблицы Abonent равна 20 [VARCHAR(20)], длина нового поля будет также иметь длину 20, а не 3 символа.

Для выделения строки в обратной последовательности (начиная с конца) используется функция REVERSE. Функция имеет следующий формат: REVERSE (<строковое_ выражение>).

Например, для вывода информации об абонентах, имеющих инициалы E.B., можно испрользовать следующий запрос: SELECT * FROM Abonent

WHERE REVERSE (Fio) STARTING WITH REVERSE ('Е.В.');. Результат выполнения запроса представлен на рис. 3.20.

предыдущаяследующая