Udostępnij za pośrednictwem


PODCIĄG (Transact-SQL)

Dotyczy:programu SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)punkt końcowy analizy SQL w usłudze Microsoft FabricMagazyn w usłudze Microsoft Fabric

Zwraca część znaku, pliku binarnego, tekstu lub wyrażenia obrazu w programie SQL Server.

Transact-SQL konwencje składni

Składnia

Składnia programu SQL Server.

SUBSTRING ( expression , start , length )

Składnia usług Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW) oraz Punkt końcowy analizy SQL w usłudze Microsoft Fabric.

SUBSTRING ( expression , start [ , length ] )

Argumenty (w programowaniu)

wyrażenie

Znak, binarny, tekst, ntekst lub wyrażenieobrazu.

Wyrażenie całkowite lub bigint określające, gdzie zaczynają się zwracane znaki. (Numerowanie jest oparte na 1, co oznacza, że pierwszy znak w wyrażeniu to 1). Jeśli wartość startowa jest mniejsza niż 1, zwracane wyrażenie zaczyna się od pierwszego znaku określonego w wyrażeniu. W takim przypadku zwracana liczba znaków jest największą wartością sumydługości + — 1 lub 0. Jeśli wartość startowa jest większa niż liczba znaków w wyrażeniu wartości, zwracane jest wyrażenie o zerowej długości.

długości

Dodatnia liczba całkowita lub wyrażenie bigint określające, ile znaków wyrażenia jest zwracanych. Jeśli długość jest ujemna, zostanie wygenerowany błąd i instrukcja zostanie zakończona. Jeśli suma początkowej i długości jest większa niż liczba znaków w wyrażeniu, zwracane jest całe wyrażenie wartości rozpoczynające się od początku . Jeśli długość zostanie pominięta, zwracane są wszystkie znaki od pozycji początkowej do końca wyrażenia.

Możesz użyć podciągów z opcjonalnym argumentem długości w usługach Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW) i Warehouse oraz punkt końcowy analizy SQL w usłudze Microsoft Fabric. Jeśli jednak używasz NULL parametru dla długości, SUBSTRING zwraca wartość NULL. Zapoznaj się z przykładem E. Użyj argumentu SUBSTRING z opcjonalnym argumentem długości .

Typy zwracane

Zwraca dane znaków, jeśli wyrażenie jest jednym z obsługiwanych typów danych znaków. Zwraca dane binarne, jeśli wyrażenie jest jednym z obsługiwanych typów danych binarnych . Zwrócony ciąg jest tym samym typem co określone wyrażenie z wyjątkami przedstawionymi w tabeli.

Określone wyrażenie Typ zwracany
Char / varchar / Tekst varchar
nchar / nvarchar / ntekst nvarchar
dwójkowy / varbinary / obraz varbinary (zmienna)

Uwagi

Wartości początkowe i długości muszą być określone w liczbie znaków dla typów danych ntext, char lub varchar oraz bajtów dla typów danych tekstowych, obrazów, binarnych lub varbinary .

Wyrażenie musi mieć wartość varchar(max) lub varbinary(max), gdy początek lub długość zawiera wartość większą niż 2147 483 647.

Znaki dodatkowe (pary zastępcze)

W przypadku używania sortowania znaków dodatkowych (SC) zarówno początkowe , jak i długości zliczają każdą parę zastępczą w wyrażeniu jako pojedynczy znak. Aby uzyskać więcej informacji, zobacz Collation and Unicode support.

Przykłady

Odp. Używanie ciągu SUBSTRING z ciągiem znaków

W poniższym przykładzie pokazano, jak zwrócić tylko część ciągu znaków. sys.databases Z tabeli to zapytanie zwraca nazwy systemowych baz danych w pierwszej kolumnie, pierwszą literę bazy danych w drugiej kolumnie oraz trzecie i czwarte znaki w końcowej kolumnie.

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

Oto zestaw wyników.

nazwa Inicjał TrzeciaICzwartaPostacie
master m st
tempdb t mp
model m de
msdb m db

Aby wyświetlić drugie, trzecie i czwarte znaki stałej abcdefciągu, użyj następującego zapytania.

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

Oto zestaw wyników.

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

B. Używanie podciągów z danymi tekstowymi, ntekstowymi i obrazami

Uwaga

Aby uruchomić następujące przykłady, należy zainstalować bazę danych pubs.

W poniższym przykładzie pokazano, jak zwrócić pierwsze 10 znaków z każdej kolumny danych tekstowych i obrazówpub_info w pubs tabeli bazy danych. dane tekstowe są zwracane jako varchar, a dane obrazu są zwracane jako elementy 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';

Oto zestaw wyników.

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

W poniższym przykładzie pokazano wpływ SUBSTRING zarówno na dane tekstowe , jak i ntekstowe . Najpierw w tym przykładzie pubs zostanie utworzona nowa tabela w bazie danych o nazwie npub_info. Po drugie, przykład tworzy kolumnę pr_info w npub_info tabeli z pierwszych 80 znaków pub_info.pr_info w kolumnie i dodaje jako ü pierwszy znak. Na koniec element INNER JOIN pobiera wszystkie numery identyfikacyjne wydawcy oraz SUBSTRINGkolumny tekstowe i ntekstowe .

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;

Przykłady: Azure Synapse Analytics and Analytics Platform System (PDW)

C. Używanie ciągu SUBSTRING z ciągiem znaków

W poniższym przykładzie pokazano, jak zwrócić tylko część ciągu znaków. dbo.DimEmployee Z tabeli to zapytanie zwraca nazwę rodziny w jednej kolumnie z tylko pierwszym początkowym w drugiej kolumnie.

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

Oto zestaw wyników.

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

W poniższym przykładzie pokazano, jak zwrócić drugi, trzeci i czwarty znak stałej abcdefciągu .

USE ssawPDW;

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

Oto zestaw wyników.

x
-----
bcd

D. Używanie ciągu SUBSTRING z argumentem NULL length

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

Oto zestaw wyników.

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

E. Używanie ciągu SUBSTRING z opcjonalnym argumentem długości

Dotyczy: Azure SQL Database, Azure SQL Managed Instance, Azure Synapse Analytics, Analytics Platform System (PDW) i Punkt końcowy analizy SQL w usłudze Microsoft Fabric

W poniższym przykładzie pokazano, jak zwrócić tylko część ciągu znaku z danej pozycji początkowej. Ponieważ argument długości nie jest podany, długość domyślna zwraca pozostałe znaki w ciągu.

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

Oto zestaw wyników.

y
-----
abc

F. Użyj argumentu SUBSTRING bez argumentu długości, aby znaleźć części zastępcze w spisie AdventureWorks2022

USE AdventureWorks2022;
GO

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

Oto zestaw wyników.

Identyfikator productDescriptionID Opis Replacement-Part
686 Wymiana koła górskiego dla zawodnika najwyższego poziomu. koło górskie dla zawodnika na poziomie podstawowym.
687 Zastąp koło górskie dla niechcenia poważnym jeźdźcem. koło górskie dla swobody dla poważnego jeźdźca.
689 Wymiana przedniego koła drogowego dla rowerzystów na poziomie wejścia. z przodu koła drogowego dla rowerzystów na poziomie wejścia.
867 Wymiana tylnego koła górskiego dla zawodnika na poziomie wejścia. tylne koło górskie dla zawodnika na poziomie podstawowym.
868 Zastąp tylne koło górskie dla niechcenia poważnego jeźdźca. tylne koło górskie dla swobody dla poważnego jeźdźca.
870 Wymiana tylnego koła dla rowerzystów na poziomie wejścia. tylne koło dla rowerzystów na poziomie wejścia.
1981 Wymiana koła górskiego dla zawodnika najwyższego poziomu. koło górskie dla zawodnika na poziomie podstawowym.
1987 Zastąp koło górskie dla niechcenia poważnym jeźdźcem. koło górskie dla swobody dla poważnego jeźdźca.
1999 Wymiana tylnego koła drogowego dla rowerzystów na poziomie wejścia. tylne koło drogowe dla rowerzystów na poziomie wejścia.