Partilhar via


SUBSTRING (Transact-SQL)

Aplica-se a:SQL ServerBase de Dados SQL do AzureInstância Gerida do Azure SQLAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Ponto de Extremidade de Análise SQL no Microsoft FabricArmazém no Microsoft FabricBase 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.