SQL удалить часть строки. Вырезать часть строки sql
Функция SUBSTRING - вырезание подстроки
Функция SUBSTRING вырезает и возвращает заданное количество символов из строки.
Первым параметром функция принимает поле или строку, вторым параметром - с какой позиции начинать вырезания (нумерация символов начинается с 1), третьем параметром - сколько символов брать.
Третий параметр не является обязательным. Если он не указан, текст будет вырезан с указанной позиции и до конца строки.
См. также функцию MID, которая также вырезает часть строки.
См. также функцию SUBSTRING_INDEX, которая берет часть строки по указанному разделителю.
Синтаксис
Первый синтаксис:
SELECT SUBSTRING(поле, откуда_отрезать, сколько_символов_взять) FROM имя_таблицы WHERE условиеАльтернативный синтаксис:
SELECT SUBSTRING(поле FROM откуда_отрезать FOR сколько_символов_взять) FROM имя_таблицы WHERE условиеТретий параметр не обязателен, в этом случае текст будет вырезан с указанной позиции и до конца строки:
Примеры
Все примеры будут по этой таблице texts, если не сказано иное:
1 | Это первый длинный текст! |
2 | Это второй длинный текст! |
Пример
В данном примере из строки вырезаются и возвращаются 6 символов, начиная с 5-го:
SELECT id, SUBSTRING(text, 5, 6) as text FROM textsSQL запрос выберет следующие строки:
1 | первый |
2 | второй |
Запрос можно переписать в следующем виде:
SELECT id, SUBSTRING(text FROM 5 FOR 6) as text FROM textsПример
В данном примере возвращается вся строка до конца, начиная с пятого символа:
SELECT id, SUBSTRING(text, 5) as text FROM textsSQL запрос выберет следующие строки:
1 | первый длинный текст! |
2 | второй длинный текст! |
Запрос можно переписать в следующем виде:
SELECT id, SUBSTRING(text FROM 5) as text FROM textscode.mu
Сочетание строковых функций на Transact-SQL | Info-Comp.ru
Сегодня предлагаю рассмотреть простые примеры использования строковых функций Transact-SQL, и не просто описание и примеры некоторых функций, а их сочетание, т.е. как можно вкладывать их друг в друга, так как для реализации многих задач стандартных функций бывает недостаточно и приходится их использовать совместно. И поэтому мне хотелось бы показать Вам пару простых примеров написания таких запросов.
Мы с Вами уже рассматривали строковые функции SQL, но так как реализации данного языка в разных СУБД различны, например некоторых функций нет в Transact-SQL, а в PL/PGSql они есть, и как раз в прошлый раз мы рассматривали строковые функции, которые можно использовать в plpgsql и поэтому сегодня мы поговорим именно о Transact-SQL.
Как можно сочетать SUBSTRING, CHARINDEX и LEN
И так, к примеру, Вам необходимо искать в строке ее часть по определенному критерию и вырезать ее, и не просто искать однотипную часть, а динамически, т.е. для каждой строки строка поиска будет разная. Примеры будем писать в Management Studio SQL Server 2008.
Для этого мы будем использовать следующие функции:
- SUBSTRING(str, start, len) – данная функция вырезает часть строки из другой строки. Имеет три параметра 1. Это сама строка; 2. Начальная позиция, с какой необходимо начать вырезать; 3. Количество символов, сколько необходимо вырезать.
- CHARINDEX(str1, str2)- ищет str1 в str2 и возвращает порядковый номер первого символа в случае нахождения такой строки. Имеет третий не обязательный параметр, с помощью которого можно указать с какой стороны начинать поиск.
- LEN (str1)-длина строки, т.е. количество символов.
Как Вы видите, здесь я использовал объявление переменных, а Вы вместо переменных можете подставлять свои поля в запросе. Вот сам код:
declare @rezult as varchar(10) --исходная строка declare @str1 as varchar(100) --строка поиска declare @str2 as varchar(10) set @str1 = 'Пробная строка string для поиска в ней другой строки' set @str2 = 'string' set @rezult=substring(@str1,CHARINDEX(@str2, @str1 ), LEN(@str2)) select @rezultКак можно сочетать LEFT, RIGHT и LEN
Допустим, что Вам необходимо получить первые несколько символов в строке или проверить эти первые символы в строке на наличие чего-либо, например, какой-то номер, а его длина естественно разная (пример естественно тестовый).
- Left (str, kol) – функции вырезает указанное количество символов с лева, имеет два параметра первой это строка а второй соответственно количество символов;
- Right (str, kol) - функции вырезает указанное количество символов с право, параметры те же самые.
Теперь будем использовать простые запросы к таблице
Для начала давайте создадим таблицу test_table:
CREATE TABLE [test_table]( [id] [bigint] IDENTITY(1,1) NOT NULL, [number] [numeric](18, 0) NULL, [text] [varchar](50) NULL, CONSTRAINT [PK_test_table] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] GOКак Вы понимаете первый запрос это просто выборка всех строк (Основы SQL - оператор select), а второй это уже непосредственно сочетание наших функций, вот код:
select * from test_table select number, left(text,LEN(number)) as str from test_tableА если бы эти номера были справа, то мы бы использовали функцию RIGHT.
Использование Rtrim, Ltrim, Upper и Lower в сочетании
Допустив у Вас, есть строка с пробелами в начале и в конце, и Вы хотели бы, конечно же, от них избавиться и еще, например, сделать, так что первая буква в этой строке стала заглавной.
- Rtrim (str) –удаляет пробелы справа;
- Ltrim(str) – удаляет пробелы слева;
- Upper(str) – приводит строку в верхний регистр;
- Lower(str) - приводит строку в нижний регистр.
Как видите, для закрепления мы здесь использовали еще и Substring и Len. Смысл запроса прост, мы удаляем пробелы и справа и слева, затем приводим первый символ к верхнему регистру путем вырезания его, далее мы конкатенируем (оператор +) этот символ с оставшейся строкой. Вот код:
declare @str1 as varchar(100) set @str1 = ' тестовая строка с пробелами в начале и в конце ' select @str1 select upper(substring(rtrim(ltrim(@str1)),1,1))+ lower(substring(rtrim(ltrim(@str1)),2,LEN(rtrim(ltrim(@str1)))-1))На сегодня я думаю достаточно, и если Вам нравиться программировать на SQL то на этом сайте мы не раз затрагивали эту очень интересную тему, например:
Удачи!
Похожие статьи:
info-comp.ru
c# - SQL удалить часть строки
Вы можете написать небольшую процедуру «имя чистой» в C #, что лишит эти элементы, а затем отсортировать список по этой раздела версию, а затем по дате. Можно также выполнить это в стороне SQL запросов серией вложенных Заменяет. И, наконец, как вы упомянули, вы можете попытаться очистить записи в базе данных (возможно, путем создания другого поля для очищаемого имени).
Какой метод вы выберете будет определяться тем, сколько данных вы имеете дело, и как часто вам нужно сделать что-то вроде этого. Если это много данных, и вы можете видеть, нуждающиеся в этом и в других будущих приложениях, я бы рекомендовал ее обработки на уровне базы данных. Вы могли бы написать функцию в SQL, которая форматирует имена, а затем решить, если вы хотите использовать его во время выполнения запроса или при вставке данных.
Функция может выглядеть следующим образом:
drop function [fn_formatName] go CREATE FUNCTION [dbo].[fn_formatName] ( @Name nvarchar(4000) ) RETURNS nvarchar(4000) AS BEGIN set @Name = replace(@Name, '.', '') set @Name = replace(@Name, ' ', ' ') if(len(@name) > 4) begin set @Name = replace(Left(@Name, 4), 'Mrs ', '') + Right(@Name, Len(@Name) - 4) end if(len(@name) > 4) begin set @Name = replace(Left(@Name, 4), 'Dr ', '') + Right(@Name, Len(@Name) - 4) end if(len(@name) > 4) begin set @Name = replace(Left(@Name, 4), 'Mr ', '') + Right(@Name, Len(@Name) - 4) end if(len(@name) > 4) begin set @Name = replace(Left(@Name, 4), 'Ms ', '') + Right(@Name, Len(@Name) - 4) end set @Name = ltrim(@Name) RETURN @Name ENDcoredump.su