Скалярные функции обработки строк
Некоторые скалярные функции обработки строк приведены в таблице 4.10.
Таблица 4.10. Функции обработки строк
Функция | Описание |
ASCII (выражение) | Возвращает числовое значение ASCII кода для самого левого символа аргумента |
CHR (выражение) | Возвращает символ, значение ASCII кода которого задано аргументом |
CONCAT (выражение1, выражение2) | Возвращает строку, полученную в результате сцепления (конкатенации) двух строк, заданных аргументами |
INSERT (аргумент1, аргумент2, аргумент3, аргумент4) | Возвращает строку, в которой аргумент3 байтов были удалены из строки аргумент1 (начиная с позиции аргумент2), и строка аргумент4 была вставлена в строку аргумент1 (начиная с позиции аргумент2). |
LCASE (выражение) LOWER (выражение) | Возвращает строку, в которой все буквы преобразованы к буквам в нижнем регистре |
LEFT (выражение1, выражение2) | Возвращает строку, представленную выражение2 лево установленными символами из строки, заданной выражением1. При необходимости, строка, заданная выражением1, дополняется справа пробелами |
LOCATE(искомая_строка, исходная_строка [, начальная_позиция ]) | Возвращает начальную позицию вхождения искомой строки в исходную строку; поиск начинается с заданной начальной позиции или с начала строки, если позиция не задана |
LTRIM (выражение) | Удаляет лидирующие пробелы из строки, заданной выражением |
POSSTR(исходная_строка , искомая_строка) | Возвращает начальную позицию вхождения искомой строки в исходную строку |
REPEAT (аргумент1, аргумент2) | Возвращает символьную строку, состоящую из аргумент1, повторенного argument2 раз |
REPLACE (аргумент1, аргумент 2, аргумент3) | Замещает все вхождения аргумент2 в аргумент1 значениями аргумент3. |
RIGHT (выражение1, выражение2) | Возвращает строку, представленную выражение2 право установленными символами из в строки, заданной выражением1. При необходимости, строка, заданная выражением1, дополняется справа пробелами |
RTRIM(выражение) | Удаляет хвостовые пробелы из строки, заданной выражением |
SPACE(выражение) | Возвращает символьную строку, состоящую из указанного выражением количества пробелов |
SUBSTR(строка, начальная_позиция [, длина ]) | Возвращает подстроку заданной длины из строки, начиная с начальной позиции; если длина не указана, выделяется весь остаток строки. Символы в строке нумеруются, начиная с 1 |
UCASE(выражение) UPPER(выражение) | Возвращает строку, в которой все буквы преобразованы к буквам в верхнем регистре |
Некоторые дополнительные скалярные функции приведены в таблице 4.11.
Таблица 4.11. Дополнительные функции
Функция | Описание |
COALESCE(выражение [, выражение … ]) | Возвращает значение первого не NULL выражения, или NULL, если все выражения имеют NULL значение |
IDENTITY_VAL_LOCAL() | Возвращает последнее значение, присвоенное колонке с атрибутом identity |
LENGTH(выражение) | Возвращает длину значения |
NULLIF(аргумент1, аргумент2) | Возвращает значение null, если аргументы равны; в противном случае возвращает значение первого аргумента |
RAISE_ERROR(sqlstate, строка_диагностики) | Возбуждает состояние ошибки в SQLCA. Значение sqlstate, которое должно быть возвращено, задается первым аргументом. Второй аргумент содержит произвольный текст, который должен быть возвращен |
VALUE(выражение [, выражение … ]) | Синоним функции COALESCE. Возвращает значение первого не NULL выражения, или NULL, если все выражения имеют NULL значение |
Предикаты
Как уже говорилось ранее, предикат определяет условие, которое может быть истинным, ложным или не определенным.
Ко всем типам предикатов применимы следующие правила:
• все значения, указанные в предикате, должны быть совместимыми;
• запросы, используемые в записи предикатов, часто называют подзапросами.
Некоторые предикаты были рассмотрены при описании предложения CREATE TABLE ЯОД. Ниже приводятся дополнительные способы записи предикатов, используемые при написании запросов на языке SQL.
Предикат с квантором
Предикат с квантором может быть записан двумя способами:
выражение операция_отношения квантор (запрос)
(выражение, …) = квантор_существования (запрос)
В первом случае в качестве квантора могут быть указаны квантор всеобщности ALL и кванторы существования SOME и ANY.
Во втором случае допускается использование только квантора существования SOME или ANY.
Операции отношения уже рассматривались ранее.
Предикат с квантором сравнивает значение или значения, указанные в левой части предиката (до операции отношения), с некоторым множеством значений, получаемым в результате выполнения запроса.
Запрос, записанный в предикате, должен возвращать в качестве результата любое количество строк, содержащих столько колонок, сколько выражений указано в левой части предиката (для первой формы – обязательно одна колонка, для второй – может быть несколько).
Если указывается ALL (квантор всеобщности):
• результат предиката – истина, если запрос ничего не возвращает или если указанное операцией отношение истинно для каждого значения, возвращаемого запросом;
• результат предиката – ложь, если указанное отношение не выполняется хотя бы для одного значения, возвращаемого запросом;
• результат предиката не определен, если указанное отношение не является ложным для значений, возвращаемых запросом, и, по крайней мере, одно сравнение не определено из-за NULL значений.
Если указываются SOME или ANY (кванторы существования):
• результат предиката – истина, если указанное отношение истинно для каждого значения хотя бы одной строки, возвращаемой запросом;
• результат предиката – ложь, если запрос ничего не возвращает или если указанное отношение не выполняется хотя бы для одного значения в каждой строке, возвращаемой запросом;
• результат предиката не определен, если указанное отношение не является истинным для строк, возвращаемых запросом, и, по крайней мере, одно сравнение не определено из-за NULL значений.