Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Base de Dados SQL do Azure
Instância Gerida do Azure SQL
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Ponto de Extremidade de Análise SQL no Microsoft Fabric
Armazém no Microsoft Fabric
Base de Dados SQL no Microsoft Fabric
Retorna parte de uma expressão de caractere, binário, texto ou imagem no SQL Server.
Transact-SQL convenções de sintaxe
Sintaxe
Sintaxe para SQL Server.
SUBSTRING ( expression , start [ , length ] )
Argumentos
expressão
Um caractere, binário, texto, ntext ou expressão de imagem.
começar
Uma expressão inteira ou bigint que especifica onde os caracteres retornados começam. (A numeração é baseada em 1, o que significa que o primeiro caractere da expressão é 1). Se start for menor que 1, a expressão retornada começará no primeiro caractere especificado na expressão. Nesse caso, o número de caracteres retornados é o maior valor da soma do + inicial - 1 ou 0. Se start for maior que o número de caracteres na expressão de valor, uma expressão de comprimento zero será retornada.
comprimento
Um inteiro positivo ou expressão bigint que especifica quantos caracteres da expressão são retornados. Se o comprimento for negativo, um erro será gerado e a instrução será encerrada. Se a soma de início e comprimento for maior que o número de caracteres na expressão, toda a expressão de valor que começa no início será retornada. Se o comprimento for omitido, todos os caracteres da posição inicial até o final da expressão serão retornados.
Podes usar substring com um argumento de comprimento opcional. No entanto, se você usar NULL para comprimento, SUBSTRING retorna NULL. Reveja E. Use SUBSTRING com argumento de comprimento opcional para um exemplo.
Tipos de devolução
Retorna dados de caracteres se a expressão for um dos tipos de dados de caracteres suportados. Retorna dados binários se expression for um dos tipos de dados binários suportados. A cadeia de caracteres retornada é do mesmo tipo que a expressão especificada com as exceções mostradas na tabela.
| Expressão especificada | Tipo de retorno |
|---|---|
| / charVarchar / Texto | Varchar |
| Nchar / Nvarchar / ntexto | Nvarchar |
| binário / Varbinary / imagem | Varbinary |
Observações
Os valores para início e comprimento devem ser especificados em número de caracteres para tipos de dados ntext, char ou varchar e bytes para tipos de dados text, image, binário ou varbinary.
A expressão deve ser varchar(max) ou varbinary(max) quando o início ou comprimento contém um valor maior que 2.147.483.647.
Caracteres suplementares (pares substitutos)
Quando você usa agrupamentos de caracteres suplementares (SC), o início e o comprimento contam cada par substituto na expressão como um único caractere. Para obter mais informações, consulte Classificação e suporte a Unicode.
Exemplos
Um. Usar SUBSTRING com uma cadeia de caracteres
O exemplo a seguir mostra como retornar apenas uma parte de uma cadeia de caracteres.
sys.databases Na tabela, essa consulta retorna os nomes do banco de dados do sistema na primeira coluna, a primeira letra do banco de dados na segunda coluna e o terceiro e quarto caracteres na coluna final.
SELECT name,
SUBSTRING(name, 1, 1) AS Initial,
SUBSTRING(name, 3, 2) AS ThirdAndFourthCharacters
FROM sys.databases
WHERE database_id < 5;
Aqui está o conjunto de resultados.
| nome | Inicial | TerceiraeQuartaPersonagens |
|---|---|---|
master |
m |
st |
tempdb |
t |
mp |
model |
m |
de |
msdb |
m |
db |
Para exibir o segundo, terceiro e quarto caracteres da constante abcdefde cadeia de caracteres , use a consulta a seguir.
SELECT SUBSTRING('abcdef', 2, 3) AS x;
Aqui está o conjunto de resultados.
x
----------
bcd
B. Use SUBSTRING com dados de texto, ntext e imagem
Observação
Para executar os exemplos a seguir, você deve instalar o banco de dados pubs.
O exemplo a seguir mostra como retornar os primeiros 10 caracteres de cada uma de uma coluna de dados de texto e imagem na pub_info tabela do pubs banco de dados.
Os dados de texto são retornados como varchar e os dados de imagem são retornados como varbinary.
USE pubs;
GO
SELECT pub_id,
SUBSTRING(logo, 1, 10) AS logo,
SUBSTRING(pr_info, 1, 10) AS pr_info
FROM pub_info
WHERE pub_id = '1756';
Aqui está o conjunto de resultados.
pub_id logo pr_info
------ ---------------------- ----------
1756 0x474946383961E3002500 This is sa
O exemplo a seguir mostra o efeito de em dados SUBSTRING e ntext. Primeiro, este exemplo cria uma nova tabela no pubs banco de dados chamada npub_info. Em segundo lugar, o exemplo cria a pr_info coluna na npub_info tabela a partir dos primeiros 80 caracteres da pub_info.pr_info coluna e adiciona um ü como o primeiro caractere. Por fim, um INNER JOIN recupera todos os números de identificação do editor e as SUBSTRING colunas de informações do editor de texto e ntext .
IF EXISTS (SELECT table_name
FROM INFORMATION_SCHEMA.TABLES
WHERE table_name = 'npub_info')
DROP TABLE npub_info;
GO
-- Create npub_info table in pubs database. Borrowed from instpubs.sql.
USE pubs;
GO
CREATE TABLE npub_info
(
pub_id CHAR (4) NOT NULL FOREIGN KEY
REFERENCES publishers (pub_id)
CONSTRAINT UPKCL_npubinfo PRIMARY KEY CLUSTERED,
pr_info NTEXT NULL
);
GO
-- Fill the pr_info column in npub_info with international data.
RAISERROR ('Now at the inserts to pub_info...', 0, 1);
GO
INSERT npub_info
VALUES ('0736', N'üThis is sample text data for New Moon Books, publisher 0736 in the pubs database'),
('0877', N'üThis is sample text data for Binnet & Hardley, publisher 0877 in the pubs databa'),
('1389', N'üThis is sample text data for Algodata Infosystems, publisher 1389 in the pubs da'),
('9952', N'üThis is sample text data for Scootney Books, publisher 9952 in the pubs database'),
('1622', N'üThis is sample text data for Five Lakes Publishing, publisher 1622 in the pubs d'),
('1756', N'üThis is sample text data for Ramona Publishers, publisher 1756 in the pubs datab'),
('9901', N'üThis is sample text data for GGG&G, publisher 9901 in the pubs database. GGG&G i'),
('9999', N'üThis is sample text data for Lucerne Publishing, publisher 9999 in the pubs data');
GO
-- Join between npub_info and pub_info on pub_id.
SELECT pr.pub_id,
SUBSTRING(pr.pr_info, 1, 35) AS pr_info,
SUBSTRING(npr.pr_info, 1, 35) AS npr_info
FROM pub_info AS pr
INNER JOIN npub_info AS npr
ON pr.pub_id = npr.pub_id
ORDER BY pr.pub_id ASC;
Exemplos: Azure Synapse Analytics and Analytics Platform System (PDW)
C. Usar SUBSTRING com uma cadeia de caracteres
O exemplo a seguir mostra como retornar apenas uma parte de uma cadeia de caracteres.
dbo.DimEmployee Na tabela, essa consulta retorna o nome da família em uma coluna com apenas a primeira inicial na segunda coluna.
-- Uses AdventureWorks
SELECT LastName,
SUBSTRING(FirstName, 1, 1) AS Initial
FROM dbo.DimEmployee
WHERE LastName LIKE 'Bar%'
ORDER BY LastName;
Aqui está o conjunto de resultados.
LastName Initial
-------------------- -------
Barbariol A
Barber D
Barreto de Mattos P
O exemplo a seguir mostra como retornar o segundo, terceiro e quarto caracteres da constante abcdefde cadeia de caracteres .
USE ssawPDW;
SELECT TOP 1 SUBSTRING('abcdef', 2, 3) AS x
FROM dbo.DimCustomer;
Aqui está o conjunto de resultados.
x
-----
bcd
D. Usar SUBSTRING com NULL argumento length
SELECT SUBSTRING('123abc', 4, NULL) AS [NULL length];
Aqui está o conjunto de resultados.
NULL length
-----------
NULL
E. Use SUBSTRING com argumento de comprimento opcional
Aplica-se a: Banco de Dados SQL do Azure, Instância Gerenciada SQL do Azure, Azure Synapse Analytics, Analytics Platform System (PDW) e ponto de extremidade de análise de depósito e SQL no Microsoft Fabric
O exemplo a seguir mostra como retornar apenas uma parte de uma cadeia de caracteres de uma determinada posição inicial. Como o argumento length não é fornecido, o comprimento assume como padrão retornar os caracteres restantes na cadeia de caracteres.
SELECT SUBSTRING('123abc', 4) AS y;
Aqui está o conjunto de resultados.
y
-----
abc
F. Use SUBSTRING sem um argumento length para encontrar peças de reposição no inventário do AdventureWorks2022
USE AdventureWorks2022;
GO
SELECT [ProductDescriptionID],
[Description],
SUBSTRING([Description], LEN('Replacement') + 1) AS [Replacement-Part]
FROM [Production].[ProductDescription]
WHERE [Description] LIKE 'Replacement%';
Aqui está o conjunto de resultados.
| ProductDescriptionID | Descrição | Replacement-Part |
|---|---|---|
| 686 | Roda de montanha de substituição para piloto de nível de entrada. | roda de montanha para piloto de nível de entrada. |
| 687 | Substituição de roda de montanha para o piloto casual a sério. | roda de montanha para o piloto casual a sério. |
| 689 | Substituição da roda dianteira rodoviária para ciclista de entrada. | roda dianteira de estrada para ciclista de nível de entrada. |
| 867 | Roda de montanha traseira de substituição para piloto de nível de entrada. | roda de montanha traseira para piloto de nível de entrada. |
| 868 | Substituição da roda de montanha traseira para o piloto casual a sério. | roda de montanha traseira para o piloto casual a sério. |
| 870 | Roda traseira de substituição para ciclista de entrada. | roda traseira para ciclista de entrada. |
| 1981 | Roda de montanha de substituição para piloto de nível de entrada. | roda de montanha para piloto de nível de entrada. |
| 1987 | Substituição de roda de montanha para o piloto casual a sério. | roda de montanha para o piloto casual a sério. |
| 1999 | Roda traseira de estrada de substituição para ciclista de entrada. | roda traseira rodoviária para ciclista de entrada. |