SQL удалить часть строки. Вырезать часть строки sql


Функция SUBSTRING - вырезание подстроки

Функция SUBSTRING вырезает и возвращает заданное количество символов из строки.

Первым параметром функция принимает поле или строку, вторым параметром - с какой позиции начинать вырезания (нумерация символов начинается с 1), третьем параметром - сколько символов брать.

Третий параметр не является обязательным. Если он не указан, текст будет вырезан с указанной позиции и до конца строки.

См. также функцию MID, которая также вырезает часть строки.

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

Синтаксис

Первый синтаксис:

SELECT SUBSTRING(поле, откуда_отрезать, сколько_символов_взять) FROM имя_таблицы WHERE условие

Альтернативный синтаксис:

SELECT SUBSTRING(поле FROM откуда_отрезать FOR сколько_символов_взять) FROM имя_таблицы WHERE условие

Третий параметр не обязателен, в этом случае текст будет вырезан с указанной позиции и до конца строки:

SELECT SUBSTRING(поле, откуда_отрезать) FROM имя_таблицы WHERE условие SELECT SUBSTRING(поле FROM откуда_отрезать) FROM имя_таблицы WHERE условие

Примеры

Все примеры будут по этой таблице texts, если не сказано иное:

id айди text текст
1 Это первый длинный текст!
2 Это второй длинный текст!

Пример

В данном примере из строки вырезаются и возвращаются 6 символов, начиная с 5-го:

SELECT id, SUBSTRING(text, 5, 6) as text FROM texts

SQL запрос выберет следующие строки:

id айди text текст
1 первый
2 второй

Запрос можно переписать в следующем виде:

SELECT id, SUBSTRING(text FROM 5 FOR 6) as text FROM texts

Пример

В данном примере возвращается вся строка до конца, начиная с пятого символа:

SELECT id, SUBSTRING(text, 5) as text FROM texts

SQL запрос выберет следующие строки:

id айди text текст
1 первый длинный текст!
2 второй длинный текст!

Запрос можно переписать в следующем виде:

SELECT id, SUBSTRING(text FROM 5) as text FROM texts

code.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

Смысл здесь вот в чем, мы, используя функцию len узнаем, сколько символов необходимо вырезать, а charindex задает ту позицию, с которой необходимо начинать вырезать, и соответственно substring выполняет саму выборку в строке.

Как можно сочетать 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 END

И тогда ваш запрос будет выглядеть следующим образом

SELECT [ListMP] ,[Name] ,dbo.fn_formatName([Name]) as 'CleanName', ,[Address1] ,[City] ,[State] ,[ZipCode] ,[Date] ,[OrderCode] ,[SequenceNbr] FROM [Customer].[dbo].[Orders] ORder by [OrderCode], CleanName, [Date]

coredump.su