SQL
Строковые функции
Поиск…
Вступление
Строковые функции выполняют операции с строковыми значениями и возвращают либо числовые, либо строковые значения.
Используя строковые функции, вы можете, например, комбинировать данные, извлекать подстроку, сравнивать строки или преобразовывать строку ко всем строчным или строчным символам.
Синтаксис
- CONCAT (string_value1, string_value2 [, string_valueN])
- LTRIM (символьное выражение)
- RTRIM (character_expression)
- SUBSTRING (выражение, начало, длина)
- ASCII (символьное выражение)
- REPLICATE (string_expression, integer_expression)
- REVERSE (string_expression)
- ВЕРХНИЙ (символьное выражение)
- TRIM (строка [characters FROM])
- STRING_SPLIT (строка, разделитель)
- STUFF (character_expression, start, length, replaceWith_expression)
- REPLACE (string_expression, string_pattern, string_replacement)
замечания
Обрезать пустые пространства
Trim используется для удаления пространства записи в начале или в конце выбора
В MSSQL нет единого TRIM()
SELECT LTRIM(' Hello ') --returns 'Hello '
SELECT RTRIM(' Hello ') --returns ' Hello'
SELECT LTRIM(RTRIM(' Hello ')) --returns 'Hello'
MySql и Oracle
SELECT TRIM(' Hello ') --returns 'Hello'
Объединить
В стандарте ANSI / ISO SQL оператор для конкатенации строк имеет значение ||
, Этот синтаксис поддерживается всеми основными базами данных, кроме SQL Server:
SELECT 'Hello' || 'World' || '!'; --returns HelloWorld!
Многие базы данных поддерживают функцию CONCAT
для объединения строк:
SELECT CONCAT('Hello', 'World'); --returns 'HelloWorld'
Некоторые базы данных поддерживают использование CONCAT
для объединения более двух строк (Oracle не работает):
SELECT CONCAT('Hello', 'World', '!'); --returns 'HelloWorld!'
В некоторых базах данных должны быть отлиты или конвертированы нестроковые типы:
SELECT CONCAT('Foo', CAST(42 AS VARCHAR(5)), 'Bar'); --returns 'Foo42Bar'
Некоторые базы данных (например, Oracle) выполняют неявные конверсии без потерь. Например, CONCAT
на CLOB
и NCLOB
дает NCLOB
. CONCAT
на число и varchar2
приводит к varchar2
и т. Д .:
SELECT CONCAT(CONCAT('Foo', 42), 'Bar') FROM dual; --returns Foo42Bar
Некоторые базы данных могут использовать нестандартный +
оператор (но в большинстве +
работает только для чисел):
SELECT 'Foo' + CAST(42 AS VARCHAR(5)) + 'Bar';
В SQL Server <2012, где CONCAT
не поддерживается, +
- единственный способ присоединиться к строкам.
Верхний и нижний регистр
SELECT UPPER('HelloWorld') --returns 'HELLOWORLD'
SELECT LOWER('HelloWorld') --returns 'helloworld'
Substring
Синтаксис: SUBSTRING ( string_expression, start, length )
. Обратите внимание, что строки SQL являются 1-индексированными.
SELECT SUBSTRING('Hello', 1, 2) --returns 'He'
SELECT SUBSTRING('Hello', 3, 3) --returns 'llo'
Это часто используется в сочетании с функцией LEN()
чтобы получить последние n
символов строки неизвестной длины.
DECLARE @str1 VARCHAR(10) = 'Hello', @str2 VARCHAR(10) = 'FooBarBaz';
SELECT SUBSTRING(@str1, LEN(@str1) - 2, 3) --returns 'llo'
SELECT SUBSTRING(@str2, LEN(@str2) - 2, 3) --returns 'Baz'
Трещина
Разделяет строковое выражение с помощью разделителя символов. Обратите внимание, что STRING_SPLIT()
является табличной функцией.
SELECT value FROM STRING_SPLIT('Lorem ipsum dolor sit amet.', ' ');
Результат:
value
-----
Lorem
ipsum
dolor
sit
amet.
дрянь
Поместите строку в другую, заменив 0 или более символов в определенной позиции.
Примечание: start
позиция 1-индексация (вы начинаете индексирование с 1, а не 0).
Синтаксис:
STUFF ( character_expression , start , length , replaceWith_expression )
Пример:
SELECT STUFF('FooBarBaz', 4, 3, 'Hello') --returns 'FooHelloBaz'
длина
SQL Server
LEN не считает конечное пространство.
SELECT LEN('Hello') -- returns 5
SELECT LEN('Hello '); -- returns 5
DATALENGTH подсчитывает конечное пространство.
SELECT DATALENGTH('Hello') -- returns 5
SELECT DATALENGTH('Hello '); -- returns 6
Следует отметить, однако, что DATALENGTH возвращает длину базового байтового представления строки, которая зависит, ia, от кодировки, используемой для хранения строки.
DECLARE @str varchar(100) = 'Hello ' --varchar is usually an ASCII string, occupying 1 byte per char
SELECT DATALENGTH(@str) -- returns 6
DECLARE @nstr nvarchar(100) = 'Hello ' --nvarchar is a unicode string, occupying 2 bytes per char
SELECT DATALENGTH(@nstr) -- returns 12
оракул
Синтаксис: Length (char)
Примеры:
SELECT Length('Bible') FROM dual; --Returns 5
SELECT Length('righteousness') FROM dual; --Returns 13
SELECT Length(NULL) FROM dual; --Returns NULL
См. Также: LengthB, LengthC, Length2, Length4
замещать
Синтаксис:
REPLACE(
String для поиска ,
String для поиска и замены ,
String для размещения в исходной строке )
Пример:
SELECT REPLACE( 'Peter Steve Tom', 'Steve', 'Billy' ) --Return Values: Peter Billy Tom
ЛЕВО ПРАВО
Синтаксис:
LEFT (строковое выражение, целое число)
RIGHT (строковое выражение, целое число)
SELECT LEFT('Hello',2) --return He
SELECT RIGHT('Hello',2) --return lo
Oracle SQL не имеет функций LEFT и RIGHT. Их можно эмулировать с помощью SUBSTR и LENGTH.
SUBSTR (строковое выражение, 1, целое число)
SUBSTR (string-expression, length (string-expression) -integer + 1, integer)
SELECT SUBSTR('Hello',1,2) --return He
SELECT SUBSTR('Hello',LENGTH('Hello')-2+1,2) --return lo
ЗАДНИЙ ХОД
Синтаксис: REVERSE (строковое выражение)
SELECT REVERSE('Hello') --returns olleH
REPLICATE
Функция REPLICATE
объединяет строку с самим собой определенное количество раз.
Синтаксис: REPLICATE (string-expression, integer)
SELECT REPLICATE ('Hello',4) --returns 'HelloHelloHelloHello'
REGEXP
Проверяет, соответствует ли строка регулярному выражению (определенному другой строкой).
SELECT 'bedded' REGEXP '[a-f]' -- returns True
SELECT 'beam' REGEXP '[a-f]' -- returns False
Заменить функцию в SQL-запросе Select and Update
Функция Replace в SQL используется для обновления содержимого строки. Вызов функции REPLACE () для MySQL, Oracle и SQL Server.
Синтаксис функции Replace:
REPLACE (str, find, repl)
Следующий пример заменяет появление таблицы South
with Southern
in Employees:
Имя | Адрес |
---|---|
Джеймс | Южный Нью-Йорк |
Джон | Южный Бостон |
Майкл | Южный Сан-Диего |
Выберите Заявление:
Если мы применим следующую функцию Replace:
SELECT
FirstName,
REPLACE (Address, 'South', 'Southern') Address
FROM Employees
ORDER BY FirstName
Результат:
Имя | Адрес |
---|---|
Джеймс | Южный Нью-Йорк |
Джон | Южный Бостон |
Майкл | Южный Сан-Диего |
Заявление о обновлении:
Мы можем использовать функцию замены для внесения постоянных изменений в нашу таблицу с помощью следующего подхода.
Update Employees
Set city = (Address, 'South', 'Southern');
Более общий подход заключается в использовании этого в сочетании с предложением WHERE следующим образом:
Update Employees
Set Address = (Address, 'South', 'Southern')
Where Address LIKE 'South%';
ParseName
БАЗЫ ДАННЫХ : SQL Server
Функция PARSENAME возвращает определенную часть заданной строки (имя объекта). имя объекта может содержать строку, такую как имя объекта, имя владельца, имя базы данных и имя сервера.
Подробнее MSDN: PARSENAME
Синтаксис
PARSENAME('NameOfStringToParse',PartIndex)
пример
Чтобы получить имя объекта, используйте индекс детали 1
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',1) // returns `ObjectName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',1) // returns `Student`
Чтобы получить имя схемы, используйте параметр part 2
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',2) // returns `SchemaName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',2) // returns `school`
Чтобы получить имя базы данных, используйте индекс детали 3
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',3) // returns `DatabaseName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',3) // returns `SchoolDatabase`
Чтобы получить имя сервера, используйте индекс детали 4
SELECT PARSENAME('ServerName.DatabaseName.SchemaName.ObjectName',4) // returns `ServerName`
SELECT PARSENAME('[1012-1111].SchoolDatabase.school.Student',4) // returns `[1012-1111]`
PARSENAME возвращает null указанная часть отсутствует в заданной строке имени объекта
INSTR
Возвращает индекс первого вхождения подстроки (ноль, если не найден)
Синтаксис: INSTR (строка, подстрока)
SELECT INSTR('FooBarBar', 'Bar') -- return 4
SELECT INSTR('FooBarBar', 'Xar') -- return 0