Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
SQL-analysslutpunkt i Microsoft Fabric
Warehouse i Microsoft Fabric
Returnerar en del av ett tecken, binärt uttryck, text eller bilduttryck i SQL Server.
Transact-SQL syntaxkonventioner
Syntax
Syntax för SQL Server.
SUBSTRING ( expression , start , length )
Syntax för Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW) och Warehouse- och SQL-analysslutpunkten i Microsoft Fabric.
SUBSTRING ( expression , start [ , length ] )
Argumentpunkter
uttryck
Ett tecken, binärt, text, ntext eller bilduttryck.
starta
Ett heltal eller bigint-uttryck som anger var de returnerade tecknen börjar. (Numreringen är 1 baserad, vilket innebär att det första tecknet i uttrycket är 1). Om start är mindre än 1 börjar det returnerade uttrycket med det första tecknet som anges i uttrycket. I det här fallet är antalet tecken som returneras det största värdet för antingen summan avstartlängden + - 1 eller 0. Om start är större än antalet tecken i värdeuttrycket returneras ett uttryck med noll längd.
längd
Ett positivt heltal eller bigint-uttryck som anger hur många tecken i uttrycket som returneras. Om längden är negativ genereras ett fel och -instruktionen avslutas. Om summan av start och längd är större än antalet tecken i uttrycket returneras hela värdeuttrycket som börjar vid start . Om längden utelämnas returneras alla tecken från startpositionen till slutet av uttrycket.
Du kan använda delsträngar med ett valfritt längdargument i Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW) och Slutpunkten för lager- och SQL-analys i Microsoft Fabric. Men om du använder NULL
för längdSUBSTRING
returnerar .NULL
Granska E. Använd SUBSTRING med valfritt längdargument som exempel.
Returtyper
Returnerar teckendata om uttrycket är en av de teckendatatyper som stöds. Returnerar binära data om uttrycket är en av de binära datatyper som stöds. Den returnerade strängen är av samma typ som det angivna uttrycket med de undantag som visas i tabellen.
Angivet uttryck | Returtyp |
---|---|
röding / varchar / SMS | Varchar |
Och det / är just därför som detnvarchar / ntext | nvarchar |
binär / varbinary / bild | varbinary |
Anmärkningar
Värdena för start och längd måste anges i antal tecken för datatyperna ntext, char eller varchar och byte för datatyperna text, bild, binär eller varbinär .
Uttrycket måste vara varchar(max) eller varbinary(max) när start- eller längden innehåller ett värde som är större än 2 147 483 647.
Tilläggstecken (surrogatpar)
När du använder extra teckensortering (SC) räknar både start och längd varje surrogatpar i uttryck som ett enda tecken. För mer information, se Sortering och Unicode-stöd.
Exempel
A. Använda SUBSTRING med en teckensträng
I följande exempel visas hur du endast returnerar en del av en teckensträng. Från tabellen sys.databases
returnerar den här frågan systemdatabasnamnen i den första kolumnen, den första bokstaven i databasen i den andra kolumnen och det tredje och fjärde tecknen i den sista kolumnen.
SELECT name,
SUBSTRING(name, 1, 1) AS Initial,
SUBSTRING(name, 3, 2) AS ThirdAndFourthCharacters
FROM sys.databases
WHERE database_id < 5;
Här är resultatet.
namn | Initial | TredjeOchFjärdeTecken |
---|---|---|
master |
m |
st |
tempdb |
t |
mp |
model |
m |
de |
msdb |
m |
db |
Om du vill visa det andra, tredje och fjärde tecknen i strängkonstanten abcdef
använder du följande fråga.
SELECT SUBSTRING('abcdef', 2, 3) AS x;
Här är resultatet.
x
----------
bcd
B. Använda SUBSTRING med text-, ntext- och bilddata
Anmärkning
Om du vill köra följande exempel måste du installera pubs-databasen.
I följande exempel visas hur du returnerar de första 10 tecknen från var och en av en text - och bilddatakolumn i pub_info
databasens pubs
tabell.
textdata returneras som varchar och bilddata returneras som 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';
Här är resultatet.
pub_id logo pr_info
------ ---------------------- ----------
1756 0x474946383961E3002500 This is sa
I följande exempel visas effekten av SUBSTRING
både text - och ntextdata . Först skapar det här exemplet en ny tabell i pubs
databasen med namnet npub_info
. För det andra skapar pr_info
exemplet kolumnen i npub_info
tabellen från de första 80 tecknen i pub_info.pr_info
kolumnen och lägger till ett ü
som det första tecknet. Slutligen hämtar en INNER JOIN
alla utgivaridentifieringsnummer och SUBSTRING
för både text- och ntextutgivarinformationskolumnerna.
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;
Exempel: Azure Synapse Analytics and Analytics Platform System (PDW)
C. Använda SUBSTRING med en teckensträng
I följande exempel visas hur du endast returnerar en del av en teckensträng. Från tabellen dbo.DimEmployee
returnerar den här frågan familjenamnet i en kolumn med endast den första initialen i den andra kolumnen.
-- Uses AdventureWorks
SELECT LastName,
SUBSTRING(FirstName, 1, 1) AS Initial
FROM dbo.DimEmployee
WHERE LastName LIKE 'Bar%'
ORDER BY LastName;
Här är resultatet.
LastName Initial
-------------------- -------
Barbariol A
Barber D
Barreto de Mattos P
I följande exempel visas hur du returnerar det andra, tredje och fjärde tecknen i strängkonstanten abcdef
.
USE ssawPDW;
SELECT TOP 1 SUBSTRING('abcdef', 2, 3) AS x
FROM dbo.DimCustomer;
Här är resultatet.
x
-----
bcd
D. Använda SUBSTRING med NULL
längdargument
SELECT SUBSTRING('123abc', 4, NULL) AS [NULL length];
Här är resultatet.
NULL length
-----------
NULL
E. Använda SUBSTRING med valfritt längdargument
Gäller för: Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW) och Slutpunkten för lager- och SQL-analys i Microsoft Fabric
I följande exempel visas hur du endast returnerar en del av en teckensträng från en viss startposition. Eftersom längdargumentet inte anges returnerar längden som standard de återstående tecknen i strängen.
SELECT SUBSTRING('123abc', 4) AS y;
Här är resultatet.
y
-----
abc
F. Använd SUBSTRING utan ett längdargument för att hitta ersättningsdelar i AdventureWorks2022-inventeringen
USE AdventureWorks2022;
GO
SELECT [ProductDescriptionID],
[Description],
SUBSTRING([Description], LEN('Replacement') + 1) AS [Replacement-Part]
FROM [Production].[ProductDescription]
WHERE [Description] LIKE 'Replacement%';
Här är resultatet.
Produktbeskrivnings-ID | Beskrivning | Replacement-Part |
---|---|---|
686 | Ersättningsfjällhjul för instegsförare. | fjällhjul för instegsförare. |
687 | Ersättning fjällhjul för casual till allvarliga ryttare. | fjällhjulet för den avslappnade till seriösa ryttaren. |
689 | Ersättningsväg framhjul för instegscyklist. | framhjul för instegscyklist. |
867 | Ersättning bakfjällhjul för instegscyklist. | bakfjällhjul för instegsförare. |
868 | Ersättning bakre fjällhjul för casual till allvarliga ryttare. | bakfjällhjulet för den avslappnade till seriösa ryttaren. |
870 | Ersättningsbakhjul för instegscyklist. | bakhjul för instegscyklist. |
1981 | Ersättningsfjällhjul för instegsförare. | fjällhjul för instegsförare. |
1987 | Ersättning fjällhjul för casual till allvarliga ryttare. | fjällhjulet för den avslappnade till seriösa ryttaren. |
1999 | Ersättningsväg bakhjul för instegscyklist. | bakhjul för instegscyklist. |