Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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
Sintassi per SQL Server.
SUBSTRING ( expression , start , length )
Sintassi per il database SQL di Azure, Istanza gestita di SQL di Azure, Azure Synapse Analytics, platform system (PDW) e l'endpoint di analisi SQL e warehouse in Microsoft Fabric.
SUBSTRING ( expression , start [ , length ] )
Argomenti
expression
Carattere, binario, testo, ntext o espressione di immagine.
start
Espressione integer o bigint che specifica dove iniziano i caratteri restituiti. (La numerazione è in base 1, ovvero il primo carattere dell'espressione è 1). Se start è minore di 1, l'espressione restituita inizia al primo carattere specificato nell'espressione. In questo caso, il numero di caratteri restituiti è il valore massimo della somma dellalunghezza iniziale + - 1 o 0. Se start è maggiore del numero di caratteri nell'espressione valore, viene restituita un'espressione di lunghezza zero.
length
Intero positivo o espressione bigint che specifica il numero di caratteri dell'espressione 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. Se la lunghezza viene omessa, vengono restituiti tutti i caratteri dalla posizione iniziale alla fine dell'espressione.
È possibile usare la sottostringa con un argomento di lunghezza facoltativo nel database SQL di Azure, nell'istanza gestita di SQL di Azure, in Azure Synapse Analytics, nel sistema PDW (Analytics Platform System) e nell'endpoint di analisi warehouse e SQL in Microsoft Fabric. Tuttavia, se si usa NULL
per lunghezza, SUBSTRING
restituisce NULL
. Per un esempio, vedere E. Utilizzare SUBSTRING con l'argomento di lunghezza facoltativo .
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.
L'espressione deve essere varchar(max) o varbinary(max) quando l'inizio o la lunghezza contiene un valore maggiore di 2.147.483.647.
Caratteri supplementari (coppie surrogate)
Quando si usano regole di confronto di caratteri supplementari (SC), sia start che length conteggiano ogni coppia di surrogati nell'espressione come un singolo carattere. Per ulteriori informazioni, vedere Supporto per Unicode e regole di confronto.
Esempi
R. Usare 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 |
Per visualizzare il secondo, il terzo e il quarto carattere della costante abcdef
stringa , usare la query seguente.
SELECT SUBSTRING('abcdef', 2, 3) AS x;
Il set di risultati è il seguente.
x
----------
bcd
B. Usare SUBSTRING con dati 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;
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';
Il set di risultati è il seguente.
pub_id logo pr_info
------ ---------------------- ----------
1756 0x474946383961E3002500 This is sa
Nell'esempio seguente viene illustrato l'effetto di SUBSTRING
sui dati di testo e ntext . 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 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;
Esempi: Azure Synapse Analytics e Piattaforma di strumenti analitici (PDW)
C. Usare SUBSTRING con una stringa di caratteri
In questo esempio viene illustrato come restituire solo una parte di una stringa di caratteri.
dbo.DimEmployee
Dalla tabella, questa query restituisce il nome della famiglia in una colonna con solo la prima iniziale 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
D. Usare SUBSTRING con NULL
l'argomento length
SELECT SUBSTRING('123abc', 4, NULL) AS [NULL length];
Il set di risultati è il seguente.
NULL length
-----------
NULL
E. Usare SUBSTRING con argomento di lunghezza facoltativo
Si applica a: Database SQL di Azure, Istanza gestita di SQL di Azure, Azure Synapse Analytics, piattaforma di analisi (PDW) e endpoint di analisi SQL e warehouse in Microsoft Fabric
Nell'esempio seguente viene illustrato come restituire solo una parte di una stringa di caratteri da una determinata posizione iniziale. Poiché l'argomento length non viene specificato, per impostazione predefinita la lunghezza restituisce i caratteri rimanenti nella stringa.
SELECT SUBSTRING('123abc', 4) AS y;
Il set di risultati è il seguente.
y
-----
abc
F. Usare SUBSTRING senza un argomento di lunghezza per trovare parti di sostituzione nell'inventario AdventureWorks2022
USE AdventureWorks2022;
GO
SELECT [ProductDescriptionID],
[Description],
SUBSTRING([Description], LEN('Replacement') + 1) AS [Replacement-Part]
FROM [Production].[ProductDescription]
WHERE [Description] LIKE 'Replacement%';
Il set di risultati è il seguente.
ProductDescriptionID | Descrizione | Replacement-Part |
---|---|---|
686 | Volante di montagna sostitutivo per il pilota di livello di ingresso. | ruota di montagna per il pilota di livello di ingresso. |
687 | Volante di montagna sostitutivo per il pilota casuale a serio. | ruota di montagna per il pilota casuale a serio. |
689 | Ruota anteriore della strada sostitutiva per ciclista di livello di ingresso. | ruota anteriore stradale per ciclista di livello superiore. |
867 | Ruota posteriore posteriore per il pilota di livello di ingresso. | ruota posteriore montano per pilota di livello di ingresso. |
868 | Ruota posteriore posteriore per il pilota casuale a serio. | volante posteriore di montagna per il casual a serio pilota. |
870 | Ruota posteriore sostitutiva per ciclista di livello di ingresso. | ruota posteriore per ciclista di livello inferiore. |
1981 | Volante di montagna sostitutivo per il pilota di livello di ingresso. | ruota di montagna per il pilota di livello di ingresso. |
1987 | Volante di montagna sostitutivo per il pilota casuale a serio. | ruota di montagna per il pilota casuale a serio. |
1999 | Ruota posteriore della strada sostitutiva per il ciclista di ingresso. | ruota posteriore stradale per ciclista di livello inferiore. |