Билайн

Стандартные строковые функции sql включают. Функции Transact-SQL. Удаление пробелов из строки

Функции языка Transact-SQL могут быть агрегатными или скалярными. Эти типы функций рассматриваются в этой статье.

Агрегатные функции

Агрегатные функции выполняют вычисления над группой значений столбца и всегда возвращают одно значение результата этих вычислений. Язык Transact-SQL поддерживает несколько обычных агрегатных функций:

AVG

Вычисляет среднее арифметическое значение данных, содержащихся в столбце. Значения, над которыми выполняется вычисление, должны быть числовыми.

MIN и MAX

Определяют максимальное и минимальное значение из всех значений данных, содержащихся в столбце. Значения могут быть числовыми, строковыми или временными (дата/время).

SUM

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

COUNT

Подсчитывает количество значений, отличных от null в столбце. Функция count(*) является единственной агрегатной функцией, которая не выполняет вычисления над столбцами. Эта функция возвращает количество строк (независимо от того, содержат ли отдельные столбцы значения null).

COUNT_BIG

Аналогична функции count, с той разницей, что возвращает значение данных типа BIGINT.

Использование обычных агрегатных функций в инструкции SELECT будет рассматриваться в одной из следующих статей.

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

Скалярные функции Transact-SQL используются в создании скалярных выражений. (Скалярная функция выполняет вычисления над одним значением или списком значений, тогда как агрегатная функция выполняет вычисления над группой значений из нескольких строк.) Скалярные функции можно разбить на следующие категории:

    числовые функции;

    функции даты;

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

    системные функции;

    функции метаданных.

Эти типы функций рассматриваются в последующих разделах.

Числовые функции

Числовые функции языка Transact-SQL - это математические функции для модифицирования числовых значений. Список числовых функций и их краткое описание приводится в таблице ниже:

Числовые функции Transact-SQL
Функция Синтаксис Описание Пример использования
ABS ABS(n)

Возвращает абсолютное значение (т. е. отрицательные значения возвращаются, как положительные) числового выражения n.

SELECT ABS(-5.320) -- Вернет 5.320 SELECT ABS(8.90) -- Вернет 8.90

ACOS, ASIN, ATAN, ATN2 ACOS(n), ASIN(n), ATAN(n), ATN2(n, m)

Обратные тригонометрические функции, вычисляющие арккосинус, арксинус, арктангенс значения n (для ATN2 вычисляется арктангенс n/m). Исходные значения n, m и результат имеют тип данных FLOAT.

COS, SIN, TAN, COT COS(n), SIN(n), TAN(n), COT(n)

Тригонометрические функции, вычисляющие косинус, синус, тангенс, котангенс значения n. Результат имеет тип данных FLOAT.

DEGREES, RADIANS DEGREES(n), RADIANS(n)

Функция DEGREES преобразует радианы в градусы, RADIANS соответственно наоборот.

SELECT DEGREES(PI() / 4) -- Вернет 45 SELECT COS(RADIANS(60.0)) -- Вернет 0.5

CEILING CEILING(n)

Округляет число до большего целого значения.

SELECT CEILING(-5.320) -- Вернет -5 SELECT CEILING(8.90) -- Вернет 9

ROUND ROUND(n, p, [t])

Округляет значение n с точностью до p. Когда аргумент p положительное число, округляется дробная часть числа n, а когда отрицательное - целая часть. При использовании необязательного аргумента t, число n не округляется, а усекается (т.е. округляется в меньшую сторону).

SELECT ROUND(5.3208, 3) -- Вернет 5.3210 SELECT ROUND(125.384, -1) -- Вернет 130.000 SELECT ROUND(125.384, -1, 1) -- Вернет 120.000

FLOOR FLOOR(n)

Округляет до меньшего целого значения.

SELECT FLOOR(5.88) -- Вернет 5

EXP EXP(n)

Вычисляет значение e n .

LOG, LOG10 LOG(n), LOG10(n)

LOG(n) - вычисляет натуральный логарифм (т.е. с основанием e) числа n, LOG10(n) - вычисляет десятичный (с основанием 10) логарифм числа n.

PI PI()

Возвращает значение π (3,1415).

POWER POWER(x, y)

Вычисляет значение x y .

RAND RAND()

Возвращает произвольное число типа FLOAT в диапазоне значений между 0 и 1.

ROWCOUNT_BIG ROWCOUNT_BIG()

Возвращает количество строк таблицы, которые были обработаны последней инструкцией Transact-SQL, исполненной системой. Возвращаемое значение имеет тип BIGINT.

SIGN SIGN(n)

Возвращает знак значения n в виде числа: +1, если положительное, -1, если отрицательное.

SQRT, SQUARE SQRT(n), SQUARE(n)

SQRT(n) - вычисляет квадратный корень числа n, SQUARE(n) - возвращает квадрат аргумента n.

Функции даты

Функции даты вычисляют соответствующие части даты или времени выражения или возвращают значение временного интервала. Поддерживаемые в Transact-SQL функции даты и их краткое описание приводятся в таблице ниже:

Функции даты Transact-SQL
Функция Синтаксис Описание Пример использования
GETDATE GETDATE()

Возвращает текущую системную дату и время.

SELECT GETDATE()

DATEPART DATEPART (item, date)

Возвращает указанную в параметре item часть даты date в виде целого числа.

Вернет 1 (Январь) SELECT DATEPART(month, "01.01.2012") -- Вернет 4 (Wednesday) SELECT DATEPART(weekday, "02.01.2012")

DATENAME DATENAME (item, date)

Возвращает указанную в параметре item часть даты date в виде строки символов.

Вернет January SELECT DATENAME(month, "01.01.2012") -- Вернет Wednesday SELECT DATENAME(weekday, "02.01.2012")

DATEDIFF DATEDIFF (item, dat1, dat2)

Вычисляет разницу между двумя частями дат dat1 и dat2 и возвращает целочисленный результат в единицах, указанных в аргументе item.

Вернет 19 (19 лет промежуток между датами) SELECT DATEDIFF(year, "01.01.1990", "01.01.2010") -- Вернет 7305 (7305 дней промежуток между датами) SELECT DATEDIFF(day, "01.01.1990", "01.01.2010")

DATEADD DATEADD (item, n, date)

Прибавляет n-е количество единиц, указанных в аргументе item к указанной дате date. (Значение аргумента n также может быть отрицательным.)

Прибавит 3 дня к текущей дате SELECT DATEADD(day, 3, GETDATE())

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

Строковые функции манипулируют значениями столбцов, которые обычно имеют символьный тип данных. Поддерживаемые в Transact-SQL строковые функции и их краткое описание приводятся в таблице ниже:

Строковые функции Transact-SQL
Функция Синтаксис Описание Пример использования
ASCII, UNICODE ASCII(char), UNICODE(char)

Преобразовывает указанный символ в соответствующее целое число кода ASCII.

SELECT ASCII("W") -- 87 SELECT UNICODE("ю") -- 1102

CHAR, NCHAR CHAR(int), NCHAR(int)

Преобразовывает код ASCII (или Unicode если NCHAR) в соответствующий символ.

SELECT CHAR(87) -- "W" SELECT NCHAR(1102) -- "ю"

CHARINDEX CHARINDEX (str1, str2)

Возвращает начальную позицию вхождения подстроки str1 в строку str2. Если строка str2 не содержит подстроки str1, возвращается значение 0

Вернет 5 SELECT CHARINDEX ("морф", "полиморфизм")

DIFFERENCE DIFFERENCE (str1, str2)

Возвращает целое число от 0 до 4, которое является разницей между значениями SOUNDEX двух строк str1 и str2. Метод SOUNDEX возвращает число, которое характеризует звучание строки. С помощью этого метода можно определить подобно звучащие строки. Работает только для символов ASCII.

Вернет 2 SELECT DIFFERENCE ("spelling", "telling")

LEFT, RIGHT LEFT (str, length), RIGHT (str, length)

Возвращает количество первых символов строки str, заданное параметром length для LEFT и последние length символов строки str для функции RIGHT.

DECLARE @str nvarchar(30) = "Синхронизация"; -- Вернет "Синх" SELECT LEFT(@str, 4) -- Вернет "зация" SELECT RIGHT(@str, 5)

LEN LEN(str)

Возвращает количество символов (не количество байт) строки str, указанной в аргументе, включая конечные пробелы.

LOWER, UPPER LOWER(str), UPPER(str)

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

DECLARE @str nvarchar(30) = "Синхронизация"; -- Вернет "СИНХРОНИЗАЦИЯ" SELECT UPPER(@str) -- Вернет "синхронизация" SELECT LOWER(@str)

LTRIM, RTRIM LTRIM(str), RTRIM(str)

Функция LTRIM удаляет начальные пробелы в строке str, RTRIM соответственно удаляет пробелы в конце строки.

QUOTENAME QUOTENAME (char_string)

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

DECLARE @str nvarchar(30) = "Синхронизация"; -- Вернет "[Синхронизация]" SELECT QUOTENAME(@str)

PATINDEX PATINDEX (%p%, expr)

Возвращает начальную позицию первого вхождения шаблона p в заданное выражение expr, или ноль, если данный шаблон не обнаружен.

Вернет 4 SELECT PATINDEX("%хро%", "Синхронизация")

REPLACE REPLACE (str1, str2, str3)

Заменяет все вхождения подстроки str2 в строке str1 подстрокой str3.

Вернет "Десинхронизация" SELECT REPLACE("Синхронизация", "Синхр", "Десинхр")

REPLICATE REPLICATE (str, i)

Повторяет i раз строку str.

Вернет "aBaBaBaBaB" SELECT REPLICATE("aB", 5)

REVERSE REVERSE (str)

Выводит строку str в обратном порядке.

Вернет "яицазинорхниС" SELECT REVERSE("Синхронизация")

SOUNDEX SOUNDEX (str)

Возвращает четырехсимвольный код soundex, используемый для определения похожести двух строк. Работает только для символов ASCII.

SPACE SPACE (length)

Возвращает строку пробелов длиной, указанной в параметре length. Аналог REPLICATE(" ", length).

STR STR (f[, len[, d]])

Преобразовывает заданное выражение с плавающей точкой f в строку, где len - длина строки, включая десятичную точку, знак, цифры и пробелы (по умолчанию равно 10), а d - число разрядов дробной части, которые нужно возвратить.

Вернет "3.14" SELECT STR (3.1415, 4, 2)

STUFF STUFF (str1, a, length, str2)

Удаляет из строки str1 length-символов, начиная с позиции a, и вставляет на их место строку str2.

Note in a book SELECT STUFF("Notebook", 5, 0," in a ") -- Handbook SELECT STUFF("Notebook", 1, 4, "Hand")

SUBSTRING SUBSTRING (str1, a, length)

Извлекает из строки str, начиная с позиции a, подстроку длиной length.

Системные функции

Системные функции языка Transact-SQL предоставляют обширную информацию об объектах базы данных. Большинство системных функций использует внутренний числовой идентификатор (ID), который присваивается каждому объекту базы данных при его создании. Посредством этого идентификатора система может однозначно идентифицировать каждый объект базы данных.

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

Системные функции Transact-SQL
Функция Синтаксис Описание Пример использования
CAST CAST (w AS type [(length)]

Преобразовывает выражение w в указанный тип данных type (если это возможно). Аргумент w может быть любым действительным выражением.

Вернет 3 SELECT CAST (3.1258 AS INT)

COALESCE COALESCE (a1, a2)

Возвращает первое значение выражения из списка выражений a1, a2, ..., которое не является значением null.

COL_LENGTH COL_LENGTH (obj, col)

Возвращает длину столбца col объекта базы данных (таблицы или представления) obj.

Вернет 4 SELECT COL_LENGTH ("Employee", "Id")

CONVERT CONVERT (type[(length)], w)

Эквивалент функции CAST, но аргументы указываются по-иному. Может применяться с любым типом данных.

CURRENT_TIMESTAMP CURRENT_TIMESTAMP

Возвращает текущие дату и время.

CURRENT_USER CURRENT_USER

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

DATALENGTH DATALENGTH (z)

Возвращает число байтов, которые занимает выражение z.

Этот запрос возвращает длину каждого поля SELECT DATALENGTH(FirstName) FROM Employee

GETANSINULL GETANSINULL ("dbname")

Возвращает 1, если использование значений null в базе данных dbname отвечает требованиям стандарта ANSI SQL.

ISNULL ISNULL (expr, value)

Возвращает значение выражения expr, если оно не равно NULL; в противном случае возвращается значение value.

ISNUMERIC ISNUMERIC (expr)

Определяет, имеет ли выражение expr действительный числовой тип.

NEWID NEWID()

Создает однозначный идентификационный номер ID, состоящий из 16-байтовой двоичной строки, предназначенной для хранения значений типа данных UNIQUEIDENTIFIER.

NEWSEQUENTIALID NEWSEQUENTIALID()

Создает идентификатор GUID, больший, чем любой другой идентификатор GUID, созданный ранее этой функцией на указанном компьютере. (Эту функцию можно использовать только как значение по умолчанию для столбца.)

NULLIF NULLIF (expr1, expr2)

Возвращает значение null, если значения выражений expr1 и expr2 одинаковые.

Запрос возвращает NULL для проекта, -- у которого Number = "p1" SELECT NULLIF(Number, "p1") FROM Project

SERVERPROPERTY SERVERPROPERTY (propertyname)

Возвращает информацию о свойствах сервера базы данных.

SYSTEM_USER SYSTEM_USER

Возвращает ID текущего пользователя.

USER_ID USER_ID ()

Возвращает идентификатор пользователя username. Если пользователь не указан, то возвращается идентификатор текущего пользователя.

USER_NAME USER_NAME ()

Возвращает имя пользователя с указанным идентификатором id. Если идентификатор не указан, то возвращается имя текущего пользователя.

Функции метаданных

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

Функции метаданных Transact-SQL
Функция Синтаксис Описание Пример использования
COL_NAME COL_NAME (tab_id, col_id)

Возвращает имя столбца с указанным идентификатором col_id таблицы с идентификатором tab_id.

Вернет имя столбца "LastName" SELECT COL_NAME (OBJECT_ID("Employee"), 3)

COLUMNPROPERTY COLUMNPROPERTY (id, col, property)

Возвращает информацию об указанном столбце.

Вернет значение свойства PRECISION -- для столбца Id таблицы Employee SELECT COLUMNPROPERTY (OBJECT_ID("Employee"), "Id", "precision")

DATABASEPROPERTY DATABASEPROPERTY (database, property)

Возвращает значение свойства property базы данных database.

Вернет значение свойства IsNullConcat -- для базы данных SampleDb SELECT DATABASEPROPERTY ("SampleDb", "IsNullConcat")

DB_ID DB_ID ()

Возвращает идентификатор базы данных db_name. Если имя базы данных не указано, то возвращается идентификатор текущей базы данных.

DB_NAME DB_NAME ()

Возвращает имя базы данных, имеющей идентификатор db_id. Если идентификатор не указан, то возвращается имя текущей базы данных.

INDEX_COL INDEX_COL (table, i, no)

Возвращает имя индексированного столбца таблицы table. Столбец указывается идентификатором индекса i и позицией no столбца в этом индексе.

INDEXPROPERTY INDEXPROPERTY (obj_id, index_name, property)

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

OBJECT_NAME OBJECT_NAME (obj_id)

Возвращает имя объекта базы данных, имеющего идентификатор obj_id.

SELECT OBJECT_NAME(245575913);

OBJECT_ID OBJECT_ID (obj_name)

Возвращает идентификатор объекта obj_name базы данных.

Вернет 245575913 - ID таблицы Employee SELECT OBJECT_ID("Employee")

OBJECTPROPERTY OBJECTPROPERTY (obj_id, property)

Возвращает информацию об объектах из текущей базы данных.

Вот полный перечень функций работы со строками, взятый из BOL:

ASCII NCHAR SOUNDEX
CHAR PATINDEX SPACE
CHARINDEX REPLACE STR
DIFFERENCE QUOTENAME STUFF
LEFT REPLICATE SUBSTRING
LEN REVERSE UNICODE
LOWER RIGHT UPPER
LTRIM RTRIM

Начнем с двух взаимно обратных функций - ASCII и CHAR .

Функция ASCII возвращает ASCII-код крайнего левого символа строкового выражения, являющегося аргументом функции.

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


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

LEFT (<строковое выражение >, <целочисленное выражение >)

и вырезает заданное вторым аргументом число символов слева из строки, являющейся первым аргументом. Итак,

SELECT DISTINCT LEFT(name, 1) FROM Ships ORDER BY 1

А вот как, например, можно получить таблицу кодов всех алфавитных символов:

SELECT CHAR(ASCII("a")+ num-1) letter, ASCII("a")+ num - 1
FROM (SELECT 5*5*(a-1)+5*(b-1) + c AS num
FROM (SELECT 1 a UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) x
CROSS JOIN
(SELECT 1 b UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) y
CROSS JOIN
(SELECT 1 c UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5) z
) x
WHERE ASCII("a")+ num -1 BETWEEN ASCII("a") AND ASCII("z")

Тех, кто еще не в курсе генерации числовой последовательности, отсылаю к соответствующей статье .

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


Я полагаю, что не будет сложным добавить эту букву в таблицу, если потребуется.

Рассмотрим теперь задачу определения нахождения искомой подстроки в строковом выражении. Для этого могут использоваться две функции - CHARINDEX и PATINDEX . Обе они возвращают начальную позицию (позицию первого символа подстроки) подстроки в строке. Функция CHARINDEX имеет синтаксис:

CHARINDEX (искомое_выражение , строковое_выражение [, стартовая_позиция ])

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

Следует отметить, что если искомая подстрока либо строковое выражение есть NULL, то результатом функции тоже будет NULL.

Следующий пример определяет позиции первого и второго вхождения символа "a" в имени корабля "California"

SELECT CHARINDEX("a",name) first_a,
CHARINDEX("a", name, CHARINDEX("a", name)+1) second_a
FROM Ships WHERE name="California"

Обратите внимание, что при определении второго символа в функции используется стартовая позиция, которой является позиция следующего за первой буквой "a" символа - CHARINDEX("a", name)+1. Правильность результата - 2 и 10 - легко проверить:-).

Функция PATINDEX имеет синтаксис:

PATINDEX ("%образец %" , строковое_выражение )

Главное отличие этой функции от CHARINDEX заключается в том, что поисковая строка может содержать подстановочные знаки - % и _. При этом концевые знаки "%" являются обязательными. Например, использование этой функции в первом примере будет иметь вид


Результат выполнения этого запроса выглядит следующим образом:


То, что в результате мы получим пустой результирующий набор, означает, что таких кораблей в базе данных нет. Давайте возьмем комбинацию значений - класс и имя корабля.

Соединение двух строковых значений в одно называется конкатенацией , и в SQL Server для этой операции используется знак "+" (в стандарте "||"). Итак,

А если строковое выражение будет содержать лишь одну букву? Запрос выведет ее. В этом легко убедиться, написав

Основные строковые функции и операторы предоставляют разнообразные возможности и возвращают в качестве результата строковое значение. Некоторые строковые функции являются двухэлементными, что означает, что они могут работать одновременно с двумя строками. Стандарт SQL 2003 поддерживает строковые функции.

Оператор конкатенации

В SQL 2003 определяется оператор конкатенации (||), который соединяет две отдельные строки в одно строковое значение.

DB2 платформа

Платформа DB2 поддерживает оператор конкатенации SQL 2003, а также его синоним -функцию CONCAT.

MySQL платформа

Платформа MySQL поддерживает функцию CONCATQ - синоним оператора конкатенации SQL 2003.

Oracle и PostgreSQL

Платформы PostgreSQL и Oracle поддерживают оператор конкатенации SQL 2003 в виде двойной вертикальной черты.

SQL Server платформа

Платформа SQL Server использует знак плюса (+) в качестве синонима оператора конкатенации SQL 2003. В SQL Server есть системный параметр CONCAT_NULL_YIELDS_NULL, который регулирует поведение системы, если при конкатенации строковых значений встречаются значения NULL.

/* Синтаксис SQL 2003 */

stringl || string2 || string3

string1string2string3

/* Для MySQL */

CONCAT("stringl", "string2")

Если любое из соединяемых значений - пустое, то возвращается пустая строка. Кроме того, если в конкатенации принимает участие числовое значение, оно неявно преобразуется в строковое.

SELECT CONCAT("My ", "bologna ", "has ", "a ", "first ", "name…");

My bologna has a first name

SELECT CONCAT("My ", NULL, "has ", "first ", "name…");

CONVERT и TRANSLATE

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

Функция TRANSLATE переводит строковое значение из одного набора символов в другой. Так, функцию TRANSLATE можно использовать для преобразования значения из набора символов English в набор символов Kanji (японский) или Cyrillic (русский). Сам перевод уже должен существовать - либо заданный по умолчанию, либо созданный при помощи команды CREATE TRANSLATION.

Синтаксис SQL 2003

CONVERT (символьное_значение USING имя_символьного_преобразования)

TRANSLATE(символьное_значение USING имя_перевода)

Функция CONVERT преобразует символьное значение к набору символов с именем, указанным в параметре имя_символьного преобразования. Функция TRANSLATE преобразует символьное значение к набору символов, указанному в имени_перевода.

Среди рассматриваемых платформ только Oracle поддерживает функции CONVERT и TRANSLATE в том виде, в каком они определяются в стандарте SQL 2003. Реализация функции TRANSLATE в Oracle очень сходна с SQL 2003, но не идентична ему. В этой реализации функция принимает только два аргумента и производит перевод только между набором символов базы данных и набором символов с поддержкой национального языка.

Реализация функции CONV в MySQL только переводит числа с одного основания в другое. А вот в SQL Server реализация функции CONVERT весьма богата возможностями и изменяет тип данных для выражения, но во всех прочих своих аспектах она отличается от функции CONVERТстандарта SQL 2003. Платформа PostgreSQL не поддерживает функцию CONVERT, а реализация функции TRANSLATE преобразует все вхождения символьной строки в любую другую символьную строку.

DB2

Платформа DB2 не поддерживает функцию CONVERT, а поддержка функции TRANSLATE не соответствует стандарту ANSI. Функция TRANSLATE используется для преобразования подстрок и, как исторически сложилось, является синонимом функции UPPER, поскольку функция UPPER только недавно была добавлена в DB2. Если функция TRANSLATE используется в DB2 с единственным аргументом в виде символьного выражения, то результатом будет та же строка, преобразованная в верхний регистр. Если функция используется с несколькими аргументами, например TRANSLATE(ucmo4HUK, замена, совпадение), то функция преобразует все символы в источнике, которые также есть в параметре совпадение. Каждый символ в источнике, который находится в том же положении, что в параметре совпадение, будет заменен символом из параметра замена. Ниже приводится пример.

TRANSLATE("Hello, World! ") "HELLO; WORLD!"

TRANSLATE("Hello, World1", "wZ", "1W") "Hewwo, Zorwd1

MySQL

Платформа MySQL не поддерживает функции TRANSLATE и CONVERT.

Oracle

Платформа Oracle поддерживает следующий синтаксис функций CONVERT и TRANSLATE.

В реализации Oracle функция CONVERT возвращает текст символьного значения, преобразованный в целевой_набор_символов. Параметр символьное_значение - это строка, которую нужно преобразовать, параметр целевой_набор_символов - это название набора символов, в который нужно преобразовать строку, а параметр исходный _набор символов - это набор символов, в котором строковое значение изначально хранилось.

Функция TRANSLATE в Oracle соответствует синтаксису ANSI, но вы можете выбирать только один из двух наборов символов: набор символов базы данных (CHARJCS) и набор символов с поддержкой национального языка (NCHARJZS).

В Oracle также поддерживается другая функция, которая также называется TRANSLATE (без использования ключевого слова USING). Эта функция TRANSLATE никак не связана с преобразованием наборов символов.

Названия целевого и исходного наборов символов можно передавать либо в виде строковых констант, либо в виде ссылки на столбец таблицы. Обратите внимание, что при преобразовании строки в набор символов, в котором отображаются не все преобразуемые символы, можно подставлять символы-заменители.

Oracle поддерживает несколько общих наборов символов, к которым относятся наборы US7ASCII, WE8DECDEC. WE8HP, F7DEC, WE8EBCDIC500, WE8PC850u WE8ISO8859PI. Например:

SELECT CONVERT("Gro2", "US7ASCII", "WE8HP") FROM DUAL;

PostgreSQL

Платформа PostgreSQL поддерживает инструкцию CONVERT стандарта ANSI, а преобразования здесь можно определять при помощи команды CREATE CONVERSION. Реализация функции TRANSLATE в PostgreSQL предоставляет расширенный набор функций, которые позволяют преобразовать любой текст в другой текст в пределах указанной строки.

TRANSLATE (символьная строка, из_текста, в_текст)

Вот несколько примеров:

SELECT TRANSLATE("12345abcde", "5а", "XX"); "1234XXbcde" SELECT TRANSLATE(title, "Computer", "PC") FROM titles WHERE type="Personal_computer" SELECT CONVERT("PostgreSQL" USING iso_8859_1_to_utf_8) "PostgreSQL"

SQL Server

Платформа SQL Server не поддерживает функцию TRANSLATE. Реализация функции CONVERT в SQL Server не соответствует стандарту SQL 2003. Эта функция в SQL Server эквивалентна функции CAST.

CONVERT (тип_данных[(длина) | (точность, масштаб)], выражение, стиль])

Предложение стиль используется для определения формата преобразования даты. За дополнительной информацией обращайтесь к документации SQL Server. Ниже приводится пример.

SELECT title, CONVERT(char(7), ytd_sales) FROM titles ORDER BY title GO

В другие. Она имеет следующий синтаксис:

CONV(число,N,M)

Аргумент число находится в системе счисления с основанием N. Функция переводит его в систему счисления с основанием M и возвращает значение в виде строки.

Пример 1

Следующий запрос переводит число 2 из десятичной системы счисления в двоичную:

SELECT CONV(2,10,2);

Результат: 10

Для перевода числа 2E из шестнадцатиричной системы в десятичную требуется запрос:

SELECT CONV("2E",16,10);

Результат: 46

Функция CHAR() переводит ASCII-код в строки. Она имеет следующий синтаксис:

CHAR(n1,n2,n3..)

Пример 2

SELECT CHAR(83,81,76);

Результат: SQL

Следующие функции возвращают длину строки:

  • LENGTH(строка);
  • OCTET_LENGTH(строка);
  • CHAR_LENGTH(строка);
  • CHARACTER_LENGTH(строка).

Пример 3

SELECT LENGTH("MySQL");

Результат: 5

Иногда бывает полезной функция BIT_LENGTH(строка) , которая возвращает длину строки в битах.

Пример 4

SELECT BIT_LENGTH("MySQL");

Результат: 40

Функции работы с подстроками

Подстрокой обычно называют часть строки. Часто требуется узнать позицию первого вхождения подстроки в строку. Эту задачу в MySQL решают три функции:

  • LOCATE(подстрока, строка [,позиция]);
  • POSITION(подстрока, строка);
  • INSTR(строка, подстрока).

Если подстрока не содержится в строке, то все три функции возвращают значение 0. Функция INSTR() отличается от двух других порядком аргументов. Функция LOCATE() может содержать третий аргумент позиция , который позволяет искать подстроку в строке не с начала, а с указанной позиции.

Пример 5

SELECT LOCATE("Топаз", "открытое акционерное общество Топаз");

Результат: 31

SELECT POSITION("Топаз", "открытое акционерное общество Топаз");

Результат: 31

SELECT INSTR("открытое акционерное общество Топаз",’Топаз’);

Результат: 31

SELECT LOCATE("Топаз", " Завод Топаз и ООО Топаз", 9);

Результат: 20

SELECT LOCATE("Алмаз", "открытое акционерное общество Топаз");

Результат: 0

Функции LEFT(строка, N) и RIGHT(строка, N) возвращают соответственно крайние левые и крайние правые N символов в строке.

Пример 6

SELECT LEFT("СУБД MySQL", 4);

Результат: СУБД

SELECT RIGHT("СУБД MySQL", 5);

Результат: MySQL

Иногда требуется получить подстроку, которая начинается с некоторой заданной позиции. Для этого используются функции:

  • SUBSTRING(строка, позиция, N);
  • MID(строка, позиция, N).

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

Пример 7

SELECT SUBSTRING("СУБД MySQL - одна из самых популярных СУБД", 6,5);

Результат: MySQL

При работе с электронными адресами и адресами сайтов очень полезна функция SUBSTR_INDEX() . Функция имеет три аргумента:

SUBSTR_INDEX(строка, разделитель, N).

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

Пример 8

SELECT SUBSTRING_INDEX("www.mysql.ru",".",2);

Результат: www.mysql

SELECT SUBSTRING_INDEX("www.mysql.ru",".",-2);

Результат: mysql.ru

Функция REPLACE(строка,подстрока1,подстрока2) позволяет заменить в строке все вхождения подстроки1 на подстроку2.

Мы продолжаем изучение языка запросов SQL, и сегодня мы с Вами будем разговаривать о строковых функциях SQL . Мы рассмотрим основные и часто используемые строковые функции, такие как: LOWER, LTRIM, REPLACE и другие, все рассматривать мы будем, конечно же, на примерах.

SELECT name || surname AS FIO FROM table

Или чтобы отделить пробелом введите

SELECT name || " " || surname AS FIO FROM table

т.е. две вертикальные черты объединяют два столбца в один, а чтобы отделить их пробелом я поставил между ними пробел (можно использовать любой символ, например тире или двоеточие ) в апострофах и объединил также двумя вертикальными чертами (в Transact-SQL вместо двух вертикальных черточек используется знак + ).

Функция INITCAP

Дальше идет также очень полезная функция, INITCAP – которая возвращает значение в строке, в которой каждое слово начинается с заглавной буквы, а продолжается маленькими. Это нужно для того, если у Вас в той или иной колонке не соблюдают правила заполнения и для того чтобы вывести все это дело в красивом виде можно использовать данную функцию, например, у Вас в таблице записи в колонке name следующего вида: ИВАН иванов или петр петров, Вы применяете данную функцию.

SELECT INITCAP (name) AS FIO FROM table

И у Вас получится вот так.

Функция UPPER

Похожая функция, только возвращает все символы с заглавной буквы, это UPPER .

SELECT UPPER (name) AS FIO FROM table

  • name – название колонки;
  • 20 – количество знаков (длина поля );
  • ‘-‘ – символ, которым нужно дополнить до необходимого количества знаков.

Функция RPAD

Сразу рассмотрим обратную функцию. RPAD – действие и синтаксис тот же что и у LPAD, только дополняются символы справа (в LPAD слева ).

SELECT RPAD (name, 20, "-") AS name FROM table

Иван—————-
Сергей—————

Функция LTRIM

Далее идет тоже в некоторых случаях полезная функция, LTRIM – эта функция удаляет крайние левые символы, которые Вы укажите. Например, у Вас в базе есть колонка «город», в которой город указан в виде «г.Москва», а также есть города которые указанны в виде просто «Москва». Но Вам нужно вывести отчет только в виде «Москва» без «г.», но как это сделать, если есть и такие и такие? Вы просто указываете своего рода шаблон «г.» и если крайние левые символы начинаются с «г.», то эти символы просто не будут выводиться.

SELECT LTRIM (city, "г.") AS gorod FROM table

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

Функция RTRIM

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

Примечание! В Transact-SQL функции RTRIM и LTRIM удаляют пробелы справа и слева соответственно.

Функция REPLACE

Теперь рассмотрим такую интересную функцию как REPLACE – она возвращает строку, в которой все совпадения символов, заменяются на Ваши символы, которые Вы укажите. Для чего ее можно использовать, например, у Вас в базе есть колонки, в которых встречаются некие разделительные символы, допустим «/». Например, Иван/Иванов, а Вам хотелось бы вывести Иван-Иванов, то напишите

SELECT REPLACE (name, "/", "-") FROM table

и у Вас произойдет замена символов.

Данная функция заменяет только полное совпадение символов, если например Вы укажите «—» т.е. три тире она и будет искать только три тире, а каждое отдельное тире заменять не будет, в отличие от следующей функции.

Функция TRANSLATE

TRANSLATE – строковая функция, которая заменяет все символы в строке, на те символы, которые Вы укажите. Исходя из названия функции, можно догадаться, что это полный перевод строки. Отличие данной функции от REPLACE в том, что она заменяет каждый символ, который Вы укажите, т.е. у Вас есть три символа, допустим абв и с помощью TRANSLATE Вы его можете заменить на abc таким образом у Вас а=a, б=b, в=c и по такому принципу будут заменяться все совпадения символов. А если Вы заменяли с помощью REPLACE, то у Вас искалось только полное совпадение символов абв расположенных подряд.

Функция SUBSTR

SUBSTR – данная функция, возвращает только тот диапазон символов, который Вы укажите. Другими словами, допустим, строка из 10 символов, а Вам все десять не нужны, а допустим, нужны только 3-8 (с третьего по восьмой ). С помощью данной функции Вы легко можете это сделать. Например, у Вас в базе есть какой-нибудь идентификатор, фиксированной длинны (типа: AA-BB-55-66-CC) и каждая комбинация символов что-то означает. И в один прекрасный момент Вам сказали вывести только 2 и 3 комбинацию символов, для этого вы пишите запрос следующего вида.

SELECT SUBSTR (ident, "4", "8") FROM table

т.е. мы выводим все символы, начиная с 4 и заканчивая 8, и после этого запроса у Вас выведется вот это:

Функция LENGTH – длина строки

Следующая функция также может пригодиться, это LENGTH – которая просто на всего считает количество символов в строке. Например, Вам нужно узнать, сколько символов в каждой ячейки столбца допустим «name», таблица следующего вида.

SELECT LENGTH (name) FROM table

после этого запроса Вы получите вот это.

4
6
7

Вот мы с Вами и рассмотрели основные строковые функции SQL. В следующих статьях мы продолжим изучение SQL.