SUBSTRING (Transact-SQL)

Si applica a: SQL Server Database SQL di Azure Istanza gestita di SQL di Azure Azure Synapse Analytics Piattaforma di strumenti analitici (PDW) Endpoint di analisi SQL in Microsoft Fabric Warehouse in Microsoft Fabric

Restituisce parte di un'espressione di tipo carattere, binario, testo o immagine in SQL Server.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

SUBSTRING ( expression, start, length )  

Argomenti

expression
È un'espressione di tipo character, binary, text, ntext o image.

start
Valore intero o espressione bigint che specifica l'inizio dei caratteri restituiti. (La numerazione è in base 1, ovvero il primo carattere dell'espressione è 1). Se start è minore di 1, l'espressione restituita inizierà con il primo carattere specificato in expression. In questo caso, il numero di caratteri restituito è il valore maggiore tra la somma di start + length- 1 oppure 0. Se start è maggiore del numero di caratteri nell'espressione valore, viene restituita un'espressione di lunghezza zero.

length
Valore integer positivo o espressione bigint che specifica quanti caratteri di expression verranno restituiti. Se length è negativo, viene generato un errore e l'istruzione viene terminata. Se la somma di start e length è maggiore del numero di caratteri di expression, viene restituita l'intera espressione del valore che inizia con start.

Tipi restituiti

Restituisce dati di tipo carattere se expression è un tipo di dati carattere supportato. Restituisce dati binari se expression è un tipo di dati binary supportato. Il tipo di dati della stringa restituita corrisponde a quello dell'espressione specificata, con le eccezioni descritte nella tabella seguente.

Espressione specificata Tipo restituito
char/varchar/text varchar
nchar/nvarchar/ntext nvarchar
binary/varbinary/image varbinary

Osservazioni:

I valori per start e lenght devono essere specificati nel numero di caratteri per i tipi di dati ntext, char, o varchar e nei byte per i tipi di dati text, image, binary, o varbinary.

Expression deve essere varchar (max) o varbinary (max) quando start o lenght contiene un valore maggiore di 2.147.483.647.

Caratteri supplementari (coppie di surrogati)

Quando si usano le regole di confronto SC (caratteri supplementari), ciascuna coppia di surrogati in expression viene considerata come un singolo carattere sia da start sia da length. Per ulteriori informazioni, vedi Supporto per Unicode e regole di confronto.

Esempi

R. Utilizzo della funzione SUBSTRING con una stringa di caratteri

In questo esempio viene illustrato come restituire solo una parte di una stringa di caratteri. Dalla tabella sys.databases, questa query restituisce i nomi di database di sistema nella prima colonna, la prima lettera del database nella seconda colonna e il terzo e quarto carattere nella colonna finale.

SELECT name, SUBSTRING(name, 1, 1) AS Initial ,
SUBSTRING(name, 3, 2) AS ThirdAndFourthCharacters
FROM sys.databases  
WHERE database_id < 5;   

Il set di risultati è il seguente.

name Iniziale ThirdAndFourthCharacters
master m st
tempdb t mp
model m de
msdb m db

Di seguito viene illustrato come visualizzare il secondo, il terzo e il quarto carattere della costante stringa abcdef.

SELECT x = SUBSTRING('abcdef', 2, 3);  

Il set di risultati è il seguente.

x  
----------  
bcd  
 
(1 row(s) affected)

B. Utilizzo della funzione SUBSTRING con dati di tipo text, ntext e image

Nota

Per eseguire gli esempi seguenti è necessario installare il database pubs.

Nell'esempio seguente viene illustrato come restituire i primi 10 caratteri di ogni colonna di dati testo e immagine nella tabella pub_info del database pubs. I dati di tipo testo vengono restituiti come varchar, e i dati di tipo immagine vengono restituiti come varbinary.

USE pubs;  
SELECT pub_id, SUBSTRING(logo, 1, 10) AS logo,   
   SUBSTRING(pr_info, 1, 10) AS pr_info  
FROM pub_info  
WHERE pub_id = '1756';  

Il set di risultati è il seguente.

pub_id logo    pr_info
------ ---------------------- ----------
1756   0x474946383961E3002500 This is sa

(1 row(s) affected)

Nell'esempio seguente vengono illustrati gli effetti della funzione SUBSTRING sui dati di tipo testo e ntesto. In primo luogo nel database pubs viene creata una nuova tabella denominata npub_info. In secondo luogo viene creata la colonna pr_info nella tabella npub_info dai primi 80 caratteri della colonna pub_info.pr_info e come primo carattere viene aggiunto ü. Infine, tramite un INNER JOIN vengono recuperati i numeri di identificazione di tutti i server di pubblicazione e il valore di SUBSTRING di entrambe le colonne di tipo testo e ntesto contenenti informazioni sui server di pubblicazione.

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  
    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 pr INNER JOIN npub_info npr  
   ON pr.pub_id = npr.pub_id  
ORDER BY pr.pub_id ASC;  

Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)

C. Utilizzo della funzione SUBSTRING con una stringa di caratteri

In questo esempio viene illustrato come restituire solo una parte di una stringa di caratteri. Questa query eseguita nella tabella dbo.DimEmployee restituisce il cognome in una colonna e l'iniziale del nome nella seconda colonna.

-- Uses AdventureWorks  
  
SELECT LastName, SUBSTRING(FirstName, 1, 1) AS Initial  
FROM dbo.DimEmployee  
WHERE LastName LIKE 'Bar%'  
ORDER BY LastName;  

Il set di risultati è il seguente.

LastName             Initial
-------------------- -------
Barbariol            A
Barber               D
Barreto de Mattos    P

L'esempio seguente mostra come restituire il secondo, il terzo e il quarto carattere della costante stringa abcdef.

USE ssawPDW;  
  
SELECT TOP 1 SUBSTRING('abcdef', 2, 3) AS x FROM dbo.DimCustomer;  

Il set di risultati è il seguente.

x
-----
bcd

Vedi anche

LEFT (Transact-SQL)
LTRIM (Transact-SQL)
RIGHT (Transact-SQL)
RTRIM (Transact-SQL)
STRING_SPLIT (Transact-SQL)
TRIM (Transact-SQL)
Funzioni per i valori stringa (Transact-SQL)