Concat sql описание. Что делает функция SQL CONCAT? Что делает функция CONCAT

В предыдущей части статьи мы рассмотрели встроенные арифметические функции. В части 5 речь пойдет о функциях работы с текстовой информацией, которые могут применяться в запросах и программном коде на языке PL/SQL.

Функция CONCAT(str1, str2)

Данная функция выполняет конкатенацию строк str1 и str2. Если один из аргументов равен NULL, то он воспринимается как пустая строка. Если оба аргумента равны NULL, то функция возвращает NULL.

CONCAT("Test", NULL) x2,

CONCAT(NULL, "Test") x3,

CONCAT(NULL, NULL) x4

Для конкатенации строк Oracle поддерживает специальный оператор конкатенации «||» , который работает аналогично функции CONCAT, например:

SELECT CONCAT("У попа ", "была собака") x1,

"У попа " || "была собака" x2

На заметку

Не следует путать оператор конкатенации «||», эквивалентный вызову функции CONCAT, и оператор «+», применяемый в арифметических операциях. В Oracle это разные операторы, но за счет автоматического приведения типов возможны трудноуловимые ошибки, например:

SELECT "5" + "3" x1

В данном случае возвращается числовое значение 8, а не текстовая строка «53». Это связано с тем, что, обнаружив арифметическую операцию «+», Oracle автоматически пытается привести аргументы к типу NUMBER.

Функция LOWER(str)

Функция LOWER преобразует все символы строки str в строчные.

SELECT LOWER("TeXt DATA") X

Функция INITCAP(str)

Возвращает строку str, в которой первые буквы всех слов преобразованы в прописные. Функция удобна для форматирования полного имени при построении отчетов.

SELECT INITCAP("ИваноВ петр сиДорович") X1

Функции LPAD(str,n, [,char]) и RPAD(str,n, [,char])

Функция LPAD возвращает строку str, дополненную слева символом char, до достижения строкой длины в n символов. По умолчанию символ-заполнитель равен пробелу и может не указываться. Если длина переданной функции строки больше n , то функция возвращает строку без изменений. Функция RPAD аналогична LPAD, но производит дополнение строки справа. Данные функции очень удобны для форматирования текстовой информации при подготовке отчетов.

SELECT LPAD("Test", 20) x1,

RPAD("Test", 20) x2,

LPAD("Test", 20, "_") x3

Функция REPLACE(str, search_str, [,replace_str])

Функция REPLACE осуществляет поиск образца search_str в строке str и каждое найденное вхождение заменяет на replace_str. По умолчанию replace_str равен пустой строке, поэтому вызов функции REPLACE с двумя аргументами приводит к удалению всех найденных вхождений. Поиск подстроки ведется с учетом регистра.

SELECT REPLACE("У попа была собака", "собака", "кошка") x1,

REPLACE("У попа была злая собака", "злая") x2,

REPLACE("У попа была собака", "Собака", "Кошка") x3

Функция TRANSLATE(str, from_mask, to_mask)

Функция TRANSLATE анализирует строку str и заменяет в ней все символы, встречающиеся в строке from_mask, на соответствующие символы из to_mask. Для корректной работы функции строки from_mask и to_mask должны иметь одинаковую длину или строка from_mask должна быть длиннее, чем to_mask. Если from_mask длинее, чем to_mask, и в процессе обработки строки str обнаружатся символы, соответствующие одному из символов from_mask, и при этом им не найдется соответствия в to_mask, то такие символы будут удалены из строки str. Если передать from_mask или to_mask, равное NULL, то функция возвратит значение NULL. Сравнение производится с учетом регистра.

SELECT TRANSLATE("Test 12345", "e2", "E!") x1,

TRANSLATE("Test 12345", "e234", "E") x2

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

IF TRANSLATE(PassWd, "0123456789", "*") = PassWd THEN

ADD_ERROR("Ошибка - Пароль должен содержать хотя бы одну цифру!");

Другой пример: идет подготовка числа к его преобразованию в NUMBER. Необходимо заменить разделители десятичных знаков «,» и «.» на «.» и удалить пробелы. Реализация данной операции при помощи TRANSLATE имеет вид:

SELECT TRANSLATE("123 455,23", "., ", "..") x1,

TRANSLATE("-123 455.23", "., ", "..") x2

Функция SUBSTR(str, m [,n])

Функция SUBSTR возвращает фрагмент строки str, начиная с символа m длиной n символов. Длину можно не указывать - в этом случае возвращается строка от символа m и до конца строки str. Нумерация символов идет с 1. Если указать m = 0, то копирование все равно начнется с первого символа. Задание отрицательного значения m приводит к тому, что символы отсчитываются от конца строки, а не от начала. Задание значений m , превышающих по абсолютному значению длину строки, приводит к тому, что функция возвращает NULL.

SELECT SUBSTR("У попа была собака", 13) x1,

SUBSTR("У попа была собака", -6) x2,

SUBSTR("Это тестовый текст", 5, 8) x3,

SUBSTR("У попа была собака", 150) x4

Текстовый

Функция INSTR(str, search_str [,n[,m]])

Функция INSTR возвращает позицию первого символа m -го фрагмента строки str, совпадающего со строкой search_str. Сравнение ведется с n-го символа строки str, при сравнении учитывается регистр. По умолчанию n = m = 1, то есть поиск ведется от начала строки и возвращается позиция первого найденного фрагмента. В случае неуспешного поиска функция возвращает 0.

SELECT INSTR("У попа была собака", "собака") x1,

INSTR("У попа была собака", "кошка") x2,

INSTR("Это текст для демонстрации поиска текста", "текст", 1, 2) x3,

INSTR("11111000000001", "1", 7) x4

На заметку

С данной функций, равно как и со всеми остальными в Oracle, часто допускаются типовые ошибки, связанные с обработкой значения NULL. Если str=NULL, то функция вернет NULL, а не ноль! Это необходимо учитывать при построении различных условий. Например, данный фрагмент программы на PL/SQL как раз не учитывает эту особенность:

IF INSTR(TXT_VAR, "*") = 0 THEN

В данном случае правильно было бы написать так:

IF NVL(INSTR(TXT_VAR, "*"), 0) = 0 THEN

Функции LENGTH(str) и LENGTHB(str)

Функция LENGTH(str) возвращает длину строки str в символах. Для пустой строки и значения NULL функция возвращает NULL, поэтому совместно с данной функцией рекомендуется использовать NVL.

SELECT LENGTH("У попа была собака") x1,

LENGTH(NULL) x3,

NVL(LENGTH(""), 0) x4

Функция CHR(n)

Возвращает символ по его коду.

SELECT CHR(64) x1

Из книги Обработка баз данных на Visual Basic®.NET автора Мак-Манус Джеффри П

Функция SUM Ваши возможности в подведении итогов не ограничены простым подсчетом записей. Используя функцию SUM, можно генерировать итоговые результаты для всех возвращаемых записей по любым числовым полям. Например, для создания запроса, который генерирует итоги по

Из книги Fiction Book Designer Краткое руководство автора Автор неизвестен

Из книги Fiction Book Designer 3.2. Краткое руководство автора Izekbis

Функция uni() Поиск/замена символа по его юникодному номеру также может быть сделана при помощи функции uni().Пример функции uni(): Boouni(107,32)Designer найдет слово Book

Из книги UNIX: взаимодействие процессов автора Стивенс Уильям Ричард

Функция pthread_rwlock_init Первая функция, pthread_rwlock_init, динамически инициализирует блокировку чтения-записи. Ее текст приведен в листинге 8.2.7-8 Присваивание атрибутов с помощью этой функции не поддерживается, поэтому мы проверяем, чтобы указатель attr был нулевым.9-19 Мы

Из книги XSLT автора Хольцнер Стивен

Функция sem_open В листинге 10.22 приведен текст функции sem_open, которая создает новый семафор или открывает существующий.Листинг 10.22. Функция sem_open//my_pxsem_fifo/sem_open.с1 #include "unpipc.h"2 #include "semaphore.h"3 #include /* для произвольного списка аргументов */4 mysem_t *5 mysem_open(const char *pathname, int

Из книги Технология XSLT автора Валиков Алексей Николаевич

Функция sem_close Текст функции sem_close приведен в листинге 10.23.11-15 Мы закрываем оба дескриптора и освобождаем память, выделенную под тип sem_t.Листинг 10.23. Функция sem_close//my_pxsem_fifo/sem_close.с1 #include "unpipc.h"2 #include "semaphore.h"3 int4 mysem_close(mysem_t *sem)5 {6 if (sem->sem_magic != SEM_MAGIC) {7 errno =

Из книги PGP: Кодирование и шифрование информации с открытым ключом. автора Левин Максим

concat() Функция concat объединяет вместе все переданные ей строки и возвращает полученную строку:concat(string string1, string string2, ...)В качестве примера рассмотрите разработанный ранее вариант таблицы стилей planets.xsl, отображающей значения элементов и значения атрибутов UNITS, в котором

Из книги Fiction Book Designer 3.2. Руководство по созданию книг автора

Из книги Введение в криптографию автора Циммерманн Филипп

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

Из книги автора

Из книги автора

Из книги автора

Хэш-функция. Еще одно важное преимущество использования PGP состоит в том, что PGP применяет так называемую «хэш-функцию», которая действует таким образом, что в том случае какого-либо изменения информации, пусть даже на один бит, результат «хэш-функции» будет совершенно

Из книги автора

Функция uni() Поиск/замена символа по его юникодному номеру также может быть сделана при помощи функции uni().Пример функции uni(): Boouni(107,32)Designer найдет слово Book

Из книги автора

Хэш-функция Однако описанная выше схема имеет ряд существенных недостатков. Она крайне медлительна и производит слишком большой объём данных - по меньшей мере вдвое больше объёма исходной информации. Улучшением такой схемы становится введение в процесс преобразования

Из книги автора

Метод Concat Описание методовМетоды приведены для последовательности sequence of T. function Concat(second: sequence of T): sequence of T; Соединяет две последовательности, дописывая вторую в конец первой и возвращая результирующую

Функция Concat (Str1,Str2,...,StrN) выполняет конкатенацию (или сцепление) строк Str1,Str2,...,StrN в том порядке, в каком они указаны в списке параметров. Сумма символов всех сцепленных строк не должна превышать 255.

Program DemoFunctionConcat; Var Word: string; Word1, Word2: string; Begin Word1:= "фирмы "; Word2:= "Microsoft"; Word:= Concat("Компьютеры ",Word1,Word2); writeln(Word); {выводится текст "Компьютеры фирмы Microsoft"} End.

Задачи для самостоятельного решения

    Задано существительное 1-го склонения, оканчивающееся на “а”. Проверьте правильность ввода. Напечатайте это слово во всех падежах. Применяйте подпрограммы.

    Проверьте правописание “ча” и “ща” в тексте. Выведите на экран количество сделанных ошибок и исправленную строку. Применяйте подпрограммы.

    Напишите алгоритм, подсчитывающий, сколько раз в данном слове х встречается данное слово у. Если слово у длиннее, чем х, то результат должен быть равен нулю. Применяйте подпрограммы.

    Выясните, сколько раз встречается каждая буква алфавита в предложенном тексте. Применяйте подпрограммы.

    Запишите строку а в обратном порядке в строку б. Посчитайте, сколько одинаковых букв находятся на одинаковых местах в этих строках. Применяйте подпрограммы.

    Заданы фамилия, имя и отчество учащегося, разделенные пробелом. Напечатайте его фамилию и инициалы. Применяйте подпрограммы.

    Проверьте правописание “жи” и “ши” в тексте. Выведите на экран количество сделанных ошибок и исправленную строку. Применяйте подпрограммы.

    Запросите произвольное предложение и имя. Найдите ошибки употребления имени и исправьте их. Выведите на экран количество сделанных ошибок и исправленную строку. Применяйте подпрограммы.

    Посчитайте количество цифр в веденной строке символов. Применяйте подпрограммы.

    Посчитайте количество букв в введенной строке символов. Применяйте подпрограммы.

Запросите несколько символов и строку для выяснения, сколько заданных символов встречается в строке. Применяйте подпрограммы.

Стандартные процедуры для работы со строками (delete, insert,str,val).

Процедура Insert

Процедура Insert вставляет в исходную строку, начиная с указанной позиции, какую-либо другую строку. Оператор Insert (Word1,Word2,5) указывает, строку Word1 необходимо вставить в строку Word2, начиная с 5-ой позиции.

Процедура Delete

Процедура Delete удаляет в исходной строке фрагмент определенной длины, начиная с указанной позиции. Так, оператор Delete(Word1,2,3) удаляет из указанной строки фрагмент, длиной в три символа, начиная со второго.

Процедура Str

Общий вид Str(Chislo,Stroka)

Процедура Str преобразовывает числовое значение переменной Chislo в строковую переменную Stroka. После первого параметра может указываться формат, аналогичный формату вывода.

Program DemoProcedureStr; Var Word: string; Chislo: integer; Begin Chislo:= 1560; Str(Chislo:8, Word); writeln(Word); {выводится строка " 1500"} End.

Процедура Val

Общий вид Val(Stroka,Chislo,Code)

Процедура Val преобразует значение строки Stroka в величину целочисленного или вещественного типа и помещает результат в Chislo. Значение строковой переменной Stroka не должно содержать пробелов в начале и в конце. Code целочисленная переменная. Если во время операции преобразования ошибки не обнаружено, значение Code равно нулю, если же ошибка обнаружена, Code будет содержать номер позиции первого ошибочного символа, а значение Chislo будет не определено.

Program DemoProcedureVal; Var Word: string; Chislo, Code: integer; Begin writeln("Введите строку цифр "); readln(Word); Val(Word, Chislo, Code); {преобразование строки в число} if Code <> 0 then writeln("Ошибка! В позиции ",Code," не цифра!",); End.

Позволяет соединить строки. Обращение к функции выглядит следующим образом:

concat(s 1 ,s 2 ,…,s n)

Пример 6.9. Программа соединения двух строк.

program prog6_9;

uses Wincrt;

s:=concat(s1,s2);

Процедура insert

Обеспечивает вставку строки в строку.Обращение к процедуре выглядит следующим образом:

insert(st1,st2,n)

где st1 – вставляемая строка

st2 – строка в которую вставляется строка st1

n – позиция с которой начинается вставка.

Пример 6.10. Программа вставки строки в строку.

program Prog6_10;

uses Wincrt;

insert(st1,st2,n);

Процедура Str

Позволяет преобразовывать числа в строку. Обращение к процедуре выглядит так:

str(Число,st);

где st - строковая константа или переменная, содержащая изображение числа;

Число - переменная, числовое значение преоразуется в строку и присваивается переменной st;

Пример 6.11. Программа преобразования числа в строку.

Program Prog6_11;

uses WinCrt;

readln (n); {Ввод числа}

str(n,st); { преобразование числа n строку }

writeln("изображение числа =",st);

Контрольные вопросы

1. Что такое строка?

2. Каким идентификатором определяются данные строкового типа?

3. Какова максимально возможная длина строки? Как определить текущую

длину строки?

4. Какие выражения называются строковыми?

5. Какие операции допустимы над строковыми данными?

6. Каким образом производится сравнение строк?

7. Какие требования предъявляются к записи выражений с операндами

строкового и литерного типа?

8. Как можно обратиться к отдельным символам строки?

9. Назначение специальных процедур и функций обработки данных

строкового типа. Приведите примеры. \