Delen via


SUBTEKENREEKS (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)SQL Analytics-eindpunt in Microsoft FabricWarehouse in Microsoft Fabric

Retourneert een deel van een teken-, binaire, tekst- of afbeeldingsexpressie in SQL Server.

Transact-SQL syntaxis-conventies

Syntaxis

Syntaxis voor SQL Server.

SUBSTRING ( expression , start , length )

Syntaxis voor Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW) en warehouse- en SQL-analyse-eindpunt in Microsoft Fabric.

SUBSTRING ( expression , start [ , length ] )

Argumenten

expressie

Een teken, binair, tekst, ntekst of afbeeldingsexpressie.

starten

Een geheel getal of bigint-expressie die aangeeft waar de geretourneerde tekens beginnen. (De nummering is gebaseerd op 1, wat betekent dat het eerste teken in de expressie 1 is. Als het begin kleiner is dan 1, begint de geretourneerde expressie bij het eerste teken dat is opgegeven in de expressie. In dit geval is het aantal tekens dat wordt geretourneerd de grootste waarde van de som van de beginlengte + - 1 of 0. Als het begin groter is dan het aantal tekens in de waardeexpressie, wordt een expressie met lengte nul geretourneerd.

lengte

Een positief geheel getal of een bigint-expressie die aangeeft hoeveel tekens van de expressie worden geretourneerd. Als de lengte negatief is, wordt er een fout gegenereerd en wordt de instructie beëindigd. Als de som van begin en lengte groter is dan het aantal tekens in de expressie, wordt de gehele waardeexpressie die begint bij het begin geretourneerd. Als de lengte wordt weggelaten, worden alle tekens van de beginpositie tot het einde van de expressie geretourneerd.

U kunt subtekenreeksen gebruiken met een optioneel lengteargument in Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW) en warehouse- en SQL-analyse-eindpunt in Microsoft Fabric. Als u echter voor NULL, SUBSTRING retourneert NULL. Controleer E. Gebruik SUBTEKENREEKS met optioneel lengteargument voor een voorbeeld.

Retourtypen

Retourneert tekengegevens als expressie een van de ondersteunde tekengegevenstypen is. Retourneert binaire gegevens als expressie een van de ondersteunde binaire gegevenstypen is. De geretourneerde tekenreeks is hetzelfde type als de opgegeven expressie met de uitzonderingen die in de tabel worden weergegeven.

Opgegeven expressie Resultaattype
verkolen / varchar / Sms varchar
nchar / nvarchar / ntekst nvarchar
binair / varbinary / beeld varbinair

Opmerkingen

De waarden voor begin en lengte moeten worden opgegeven in het aantal tekens voor gegevenstypen ntext, teken of varchar en bytes voor tekst, afbeelding, binair of varbinair gegevenstype.

De expressie moet varchar(max) of varbinary(max) zijn wanneer het begin of de lengte een waarde bevat die groter is dan 2.147.483.647.

Aanvullende tekens (surrogaatparen)

Wanneer u sc-sorteringen (aanvullende tekens) gebruikt, tellen zowel begin - als lengteaantallen elk surrogaatpaar in expressie als één teken. Zie Sortering en Unicode-ondersteuningvoor meer informatie.

Voorbeelden

Eén. SUBTEKENREEKS gebruiken met een tekenreeks

In het volgende voorbeeld ziet u hoe u slechts een deel van een tekenreeks retourneert. Uit de sys.databases tabel retourneert deze query de systeemdatabasenamen in de eerste kolom, de eerste letter van de database in de tweede kolom en de derde en vierde tekens in de laatste kolom.

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

Hier is het resultatenoverzicht.

naam Initiaal DerdeEnVierdeKarakters
master m st
tempdb t mp
model m de
msdb m db

Als u de tweede, derde en vierde tekens van de tekenreeksconstante abcdefwilt weergeven, gebruikt u de volgende query.

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

Hier is het resultatenoverzicht.

x
----------
bcd

B. SUBTEKENREEKS gebruiken met tekst-, ntekst- en afbeeldingsgegevens

Opmerking

Als u de volgende voorbeelden wilt uitvoeren, moet u de pubs-database installeren.

In het volgende voorbeeld ziet u hoe u de eerste 10 tekens retourneert uit elk van een kolom met tekst - en afbeeldingsgegevens in de pub_info tabel van de pubs database. tekstgegevens worden geretourneerd als varchar en afbeeldingsgegevens worden geretourneerd als 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';

Hier is het resultatenoverzicht.

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

In het volgende voorbeeld ziet u het effect van SUBSTRING zowel tekst - als ntekstgegevens . In dit voorbeeld wordt eerst een nieuwe tabel gemaakt in de database met de pubs naam npub_info. Ten tweede wordt in het voorbeeld de pr_info kolom in de npub_info tabel gemaakt op basis van de eerste 80 tekens van de pub_info.pr_info kolom en wordt een ü kolom toegevoegd als het eerste teken. INNER JOIN Ten slotte worden alle uitgeversidentificatienummers en de SUBSTRING kolommen met gegevens van de tekst- en ntekstuitgever opgehaald.

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;

Voorbeelden: Azure Synapse Analytics and Analytics Platform System (PDW)

C. SUBTEKENREEKS gebruiken met een tekenreeks

In het volgende voorbeeld ziet u hoe u slechts een deel van een tekenreeks retourneert. In de dbo.DimEmployee tabel retourneert deze query de familienaam in één kolom met alleen de eerste initiële in de tweede kolom.

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

Hier is het resultatenoverzicht.

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

In het volgende voorbeeld ziet u hoe u de tweede, derde en vierde tekens van de tekenreeksconstante abcdefretourneert.

USE ssawPDW;

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

Hier is het resultatenoverzicht.

x
-----
bcd

D. SUBTEKENREEKS met NULL lengteargument gebruiken

SELECT SUBSTRING('123abc', 4, NULL) AS [NULL length];

Hier is het resultatenoverzicht.

NULL length
-----------
NULL

E. SUBTEKENREEKS gebruiken met optioneel lengteargument

Van toepassing op: Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW) en warehouse- en SQL-analyse-eindpunt in Microsoft Fabric

In het volgende voorbeeld ziet u hoe u slechts een deel van een tekenreeks retourneert vanaf een bepaalde beginpositie. Omdat het argument lengte niet is opgegeven, wordt de lengte standaard ingesteld op het retourneren van de resterende tekens in de tekenreeks.

SELECT SUBSTRING('123abc', 4) AS y;

Hier is het resultatenoverzicht.

y
-----
abc

F. Subtekenreeks zonder een lengteargument gebruiken om vervangingsonderdelen te vinden in de inventaris AdventureWorks2022

USE AdventureWorks2022;
GO

SELECT [ProductDescriptionID],
       [Description],
       SUBSTRING([Description], LEN('Replacement') + 1) AS [Replacement-Part]
FROM [Production].[ProductDescription]
WHERE [Description] LIKE 'Replacement%';

Hier is het resultatenoverzicht.

ProductbeschrijvingID Beschrijving Replacement-Part
686 Vervangend bergwiel voor de instaprijder. bergwiel voor instaprijder.
687 Vervangend bergwiel voor de casual tot serieuze renner. Mountainbike voor de casual tot serieuze rijder.
689 Vervangend voorwiel voor instapniveau fietser. voorwiel voor instapniveau fietser.
867 Vervangend achterbergwiel voor de renner op het instapniveau. achterbergwiel voor instaprijder.
868 Vervangend achterwiel voor de casual tot serieuze renner. achterbergwiel voor de casual tot serieuze renner.
870 Vervangend achterwiel voor fietser op instapniveau. achterwiel voor fietser op instapniveau.
1981 Vervangend bergwiel voor de instaprijder. bergwiel voor instaprijder.
1987 Vervangend bergwiel voor de casual tot serieuze renner. Mountainbike voor de casual tot serieuze rijder.
1999 Vervangend achterwiel voor fietser op instapniveau. achterwiel voor fietser op instapniveau.