Dela via


DELSTRÄNG (Transact-SQL)

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL-analysslutpunkt i Microsoft FabricWarehouse 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 abcdefanvä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.