Substring sql ms sql: SUBSTRING (Transact-SQL) — SQL Server

Содержание

регулярных выражений T-SQL: SUBSTRING, PATINDEX и CHARINDEX | by {coding}Sight

7 мин чтения

·

25 августа 2020 г.

В моей предыдущей статье о регулярных выражениях T-SQL я объяснил оператор LIKE, его использование и привел несколько примеров с ним. В этой статье мы собираемся обсудить функции SUBSTRING, PATINDEX и CHARINDEX T-SQL. Эти функции можно использовать для сопоставления с образцом.

Во-первых, позвольте мне объяснить функцию SUBSTRING и привести примеры с ней.

Функция SQL Server SUBSTRING() используется для извлечения подстроки из данной input_string. Он извлекает подстроку, начиная с указанной позиции, определяемой параметром.
Ниже приведен синтаксис для SUBSTRING()

 SUBSTRING(входная_строка, начальная_позиция, длина) 

Функция SUBSTRING() принимает следующие параметры:

  1. Входная_строка. Этот параметр определяет строковое выражение, из которого вы хотите извлечь подстроку. Этот параметр может быть текстом, символом или двоичной строкой.
  2. Начальная_позиция. Этот параметр определяет начальную позицию, из которой вы хотите извлечь подстроку. Этот параметр должен быть целым числом. Вы можете использовать только один параметр начальной позиции.
  3. Длина. Этот параметр определяет позицию символа, который вы хотите извлечь из входной строки. Этот параметр должен быть целым числом.

Ниже приведены примеры функции SUBSTRING.

Пример 1: Используйте SUBSTRING с вводом буквальной строки

Например, я хочу извлечь слово «DBA» из входной строки « Nisarg is DBA ». Во входной строке позиция символа D равна одиннадцати, а мы хотим извлечь три символа, поэтому значение параметра « start_position » равно 11, а значение параметра « length » равно 3

Для этого выполните следующее:

 SELECT Substring('Nisarg is DBA', 11, 3) 

Ниже приведен вывод:

 Substring 
---------
DBA

Пример 2.

Использование SUBSTRING в запросе T-SQL

Я создал образец таблицы с именем «IPDREGISTRATION» в базе данных VSData. В таблице есть столбец «IPDREGNO», который представляет регистрационный номер пациента. IPDREGNO — это уникальный номер в формате <6-значный IncrementalNumber>. Например, IP1920000001.

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

 USE vsdata 
go
SELECT Substring(ipdregno, 7, 6)AS IPDNO,
имя пациента
FROM vsdata.ipdregistration

Ниже приведен вывод:

 IPDNO Пациент Имя 
------ ------------------
000002 ПАРИМАЛ ГАНДИ
000001 РАХЕМАН КАСИМ
000003 ДЖАНВИ БХАНУБХАЙ
000006 ХИНАБЕН РАМЕШБХАЙ
000004 МОХМАД САФАН МОХМАД ХАНИФ
000005 ПРЕМГИБХАЙ ВАДХАБХАЙ
000007 АШИС СУРЯКАНТ
000008 КУЛСУМБАЙ РАХИМБХАЙ
000009 БЭБИ
0000 10 RANCHODEBHAI BANABHAI<\pre>

Пример 3.

Извлечение доменного имени из адреса электронной почты

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

 SELECT a.firstname, 
a.lastname,
a.emailaddress,
Substring (a.emailaddress, Charindex( '@', emailaddress ) + 1, -- Start Position
Len(emailaddress) -- End Position.
) AS [имя домена]
FROM пользователей a

Как видно из приведенного выше сценария, функция CHARINDEX() ищет строку после символа @ и добавляет +1, чтобы пометить ее как начальную позицию строки. Затем он использует функцию LEN для получения конечной точки.

Вывод:

С помощью этого сценария мы также можем найти количество адресов электронной почты для каждого доменного имени. Для этого мы будем использовать функцию COUNT и предложение GROUP BY. Эту задачу выполняет следующий сценарий:

 SELECT Count(1), 
Substring (a. emailaddress, Charindex( '@', emailaddress ) + 1, Len(
адрес электронной почты)
) AS [Domain Name]
FROM users a
GROUP BY Substring (a.emailaddress, Charindex( '@', a.emailaddress ) + 1,
Len(a.emailaddress))

Вывод:

Функция SQL Server CHARINDEX() используется для поиска позиции подстроки внутри входной строки. В отличие от SUBSTRING(), эта функция начинает поиск с указанного места и возвращает позицию подстроки. Если подстрока не найдена, возвращается ноль. Функция CHARINDEX() используется для выполнения поиска с учетом и без учета регистра на основе параметров сортировки, указанных в запросе.
Ниже приведен синтаксис функции CHARDINDEX().

 CHARINDEX(подстрока, input_string [ start_location]) 

CHARINDEX() принимает три аргумента:

  1. Подстрока. Этот аргумент определяет подстроку, которую вы хотите найти во входной строке.
  2. Строка_ввода. Этот аргумент определяет входную строку.
  3. Начальное_местоположение. Этот аргумент определяет место, с которого вы хотите начать поиск во входной строке. Тип данных этого параметра — целое число, и это необязательный параметр. Если этот параметр не указан, то поиск начинается с начала входной строки.

Ниже приведены примеры функции CHARINDEX.

Пример 1: Использование CHARINDEX с вводом литеральной строки

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

 SELECT Charindex('пример', 'Это пример CHARINDEX')AS Вывод 

Ниже приведен вывод:

 Вывод 
-----------
19

Теперь выполните следующий запрос:

 SELECT Charindex('примеры', 'Это пример CHARINDEX')AS Вывод 

Ниже приведен вывод:

 Вывод 
-----------
0

Пример 2: Выполнить case- чувствительный поиск

Как я упоминал выше, мы можем выполнять поиск с учетом регистра, используя функцию CHARINDEX. Для этого мы должны использовать функцию COLLATE в запросе. Например, я хочу получить позицию подстроки «CHARINDEX» из входной строки «Это пример CHARINDEX». Для этого выполните следующий запрос:

 SELECT Charindex('charindex', 'Это пример CHARINDEX' COLLATE 
latin1_general_cs_as)
AS Output

Следующий вывод:

 Output 
-----------
0

Как ты Как видно из приведенного выше, мы использовали сортировку с учетом регистра, поэтому позиция слова «CHARINDEX» равна нулю. Теперь выполните следующий запрос:

 SELECT Charindex('charindex', 'Это пример CHARINDEX')AS Вывод 

Ниже приведен вывод:

 Вывод 
-----------
9

Как видите, запрос вернул позицию слова «CHARINDEX» из входной строки.

Пример 3. Получение имени файла базы данных с помощью функции T-SQL

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

 СОЗДАТЬ ФУНКЦИЮ [DBO].[GETFILENAME] (@PATH NVARCHAR(MAX)) 
RETURN NVARCHAR(MAX)
AS
BEGIN
DECLARE @FILENAME NVARCHAR(MAX)
DECLARE @REVERSEDPATH NVARCHAR(MAX)
SET @REVERSEDPATH = REVERSE(@PATH)
SELECT @FILENAME = RIGHT(@PA TH, CHARINDEX('\ ', @REVERSEDPATH) - 1)
RETURN @FILENAME
END

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

 USE vsdata 
go
SELECT Db_name(database_id) AS DatabaseName,
Physical_name AS [Расположение файла базы данных],
(SELECT dbo.Getfilename(physical_name)) AS[Имя файла базы данных]
FROM sys.master_files
WHERE database_id > 5

Ниже приведен вывод:

Функция SQL Server PATINDEX() возвращает позицию шаблона в пределах строка ввода. Ниже приведен синтаксис PATINDEX():

 PATINDEX ('%StringPattern%', input_string) 

Функция PATINDEX() принимает два параметра:

1. String_Pattern. Этот параметр определяет символьное выражение, которое вы хотите найти во входной строке. В шаблоне он содержит подстановочные знаки, такие как % и «_». Подстановочные знаки такие же, как и в операторах LIKE.

2. input_string. Этот параметр определяет входную строку, в которой вы хотите найти шаблон.

Функция PATINDEX() возвращает позицию первого вхождения шаблона в строку. Если шаблон не найден в строке, эта функция возвращает ноль. Если вы передаете NULL в качестве input_parameter, он возвращает NULL. Шаблон поиска PATINDEX() основан на сопоставлении входного параметра. Мы можем использовать предложение COLLATE для использования определенного сопоставления.

Ниже приведены примеры функций SQL Server PATINDEX().

Пример 1: Использование PATINDEX в текстовом вводе строки

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

 SELECT Patindex('%example%', 'Пример подстановочного знака') position; 

Вывод:

 позиция 
-----------
11

Пример 2: Использование PATINDEX с подстановочными знаками

Мы можем использовать подстановочные знаки, чтобы найти положение определенного слова во входной строке. В следующем примере мы используем % и подстановочный знак _, чтобы найти позицию слова, в котором первые два символа — «Wi», за которыми следуют любые другие два символа и -card во входной строке «Пример подстановочного знака PATINDEX». .

 SELECT Patindex('%Wi__-card%', 'Пример подстановочного знака PATINDEX') position; 

Вывод:

 position 
-----------
10

Пример 3. Использование PATINDEX в запросе T-SQL

Например, мы хотим получить позицию первого появления шаблона «wideworldimporters. ком.” В следующем запросе я использую функцию PATINEDX() в столбце Logon таблицы Application. people базы данных WideWorldImportors. Образец базы данных можно загрузить из Интернета.

Если эта статья оказалась вам полезной, продолжайте читать блог, чтобы узнать больше о регулярных выражениях T-SQL — https://codingsight.com/t-sql-regular-expressions-substring-patindex-and-charindex/.

Спасибо и следите за обновлениями!

Подстрока в SQL Server | Темы масштабирования

Обзор

Функция SUBSTRING() в SQL Server (Transact SQL) позволяет пользователю извлекать часть символьного, двоичного, текстового или графического выражения.

Что такое подстрока на сервере SQL?

SUBSTRING() — это функция на сервере SQL, которая позволяет пользователю извлекать подстроку из любой заданной строки заданной длины, начиная с заданного места во входной строке.

Синтаксис подстроки на сервере SQL

Ниже показан синтаксис функции ПОДСТРОКА():

 
 ПОДСТРОКА(выражение, начало, длина)
 

Значения параметров подстроки в SQL Server

В приведенном выше синтаксисе:

  • выражение — может быть символьным, двоичным, текстовым или графическим выражением
  • начало — целочисленное значение, указывающее место, где начинается подстрока (индексация на основе 1)
  • длина — положительное целое число, указывающее количество возвращаемых символов

Правила для параметров в подстроке

  • Первый символ во входном выражении равен 1, а не нулю.
  • Если начальный параметр больше длины выражения, то в качестве вывода ничего не возвращается.
  • Возникает ошибка, если параметр длины имеет отрицательное значение. — Если начало + длина > длина выражения, в этом случае выходной подстрокой будет строка, начинающаяся с начальной позиции до конца исходной строки.

Типы возвращаемых подстрок в SQL Server

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

Выражение Тип возвращаемого значения
char/varchar/text varchar
nchar/nvarchar/ntext nvarchar
двоичный/varbinary/изображение varbinary

Примеры подстроки на сервере SQL

Использование функции SUBSTRING() на сервере SQL со строкой символов

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

 
 SELECT SUBSTRING('Scaler',1,5) AS SUB;
 

Выход

 
 SUB
    Шкала
 

В приведенной выше программе мы извлекаем подстроку длиной 5, начиная с первого символа строки Scaler.

Использование SUBSTRING() со строкой символов с параметром длины, значение которого превышает максимальную длину выражения

 
 SELECT SUBSTRING('Scaler',3,6) AS SUB ;
 

Выход

 
 SUB
    алер
 

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

Использование функции SUBSTRING() со столбцами таблицы в базе данных

Мы можем рассмотреть следующую таблицу Players с двумя столбцами jersey_num и name. Наша задача — извлечь фамилию игрока из заданной таблицы.

Таблица игроков выглядит следующим образом:

jersey_num имя
18 Вират Кохли
7 МС Дони
45 Рохит Шарма
 
 ВЫБЕРИТЕ jersey_num,
        ПОДСТРОКА(
            имя,
            ПОЗИЦИЯ('' В имени) + 1,
            ДЛИНА (имя) - ПОЗИЦИЯ (' ' В имени)
            ) AS фамилия
    ОТ
        Игроки
 

Выход

 
 | номер_джерси | фамилия |
    |:----------:|:---------:|
    | 18 | Кохли |
    | 7 | Дони |
    | 45 | Шарма |
 

В приведенной выше программе сначала мы использовали функцию POSITION() для поиска позиции ‘ ‘, то есть пустого символа в столбце имени, так как last_name будет начинаться после символа ‘ ‘. Затем мы использовали результат функции POSITION(), чтобы определить следующее:
— Начальное местоположение фамилии: POSITION(‘ ‘ IN name) + 1
— Длина фамилии: LENGTH(name) — POSITION(‘ ‘ IN name)

Использование функции SUBSTRING() с текстовыми, текстовыми и графическими данными

В приведенном ниже примере показано, как мы можем использовать функцию SUBSTRING() для извлечения символов из столбцов текстовых и графических данных в таблице pub_info базы данных pubs.

Для запуска следующих примеров необходимо установить базу данных pubs. База данных Pubs предоставляет набор вымышленных сведений об издателях, авторах, названиях и продажах книг.

 
 Пабы ЕГЭ;
    ВЫБРАТЬ pub_id, SUBSTRING(логотип, 1, 10) КАК логотип,
       SUBSTRING(pr_info, 1, 10) КАК pr_info
    ОТ pub_info
    ГДЕ pub_id = '1756';
 

Выход

 
 | pub_id | логотип | pr_info |
    |:------:|:----------------------:|:-----------:|
    | 1756 | 0x474946383961E3002500 | Это са |
 

Извлекаются первые десять символов из каждого столбца данных text и image таблицы pub_info.