SUBSTRING (Transact-SQL)

Gibt einen Teil eines Zeichen-, Binär-, Text- oder Bildausdrucks zurück. Weitere Informationen zu den gültigen SQL Server-Datentypen, die mit dieser Funktion verwendet werden können, finden Sie unter Datentypen (Transact-SQL).

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

SUBSTRING ( value_expression ,start_expression , length_expression )

Argumente

  • value_expression
    Ein Ausdruck vom Datentyp character, binary, text, ntext oder image.

  • start_expression
    Ist eine ganze Zahl oder ein bigint-Ausdruck, der angibt, wo die zurückgegebenen Zeichen beginnen. Wenn start_expression kleiner als 1 ist, beginnt der zurückgegebene Ausdruck bei dem ersten Zeichen, das in value_expression angegeben wird. In diesem Fall handelt es sich bei der Anzahl von zurückgegebenen Zeichen um den größten Wert der Summe von start_expression und length_expression oder 0. Wenn start_expression größer ist als die Anzahl der Zeichen in dem Werteausdruck, wird eine Zeichenfolge der Länge 0 (null) zurückgegeben.

  • length_expression
    Eine positive ganze Zahl, oder ein bigint-Ausdruck, die angeben, wie viele Zeichen des value_expression zurückgegeben werden. Wenn length_expression negativ ist, wird ein Fehler generiert, und die Anweisung wird beendet. Wenn die Summe von start_expression und length_expression größer ist als die Anzahl der Zeichen in value_expression, wird der gesamte Wertausdruck, beginnend bei start_expression, zurückgegeben.

Rückgabetypen

Gibt Zeichendaten zurück, wenn expression einer der unterstützten Zeichendatentypen ist. Gibt Binärdaten zurück, wenn expression einer der unterstützten binary-Datentypen ist. Die zurückgegebene Zeichenfolge hat denselben Typ wie der angegebene Ausdruck, mit den folgenden Ausnahmen:

Angegebener Ausdruck

Rückgabetyp

char/varchar/text

varchar

nchar/nvarchar/ntext

nvarchar

binary/varbinary/image

varbinary

Hinweise

Die Werte für start_expression und length_expression müssen für ntext-, char- und varchar-Datentypen als Anzahl der Zeichen angegeben werden und für text-, image-, binary- und varbinary-Datentypen in Byte.

value_expression muss vom Datentyp varchar(max) oder varbinary(max) sein, wenn start_expression oder length_expression einen Wert größer als 2147483647 enthält.

HinweisHinweis

Kompatibilitätsgrade können sich auf Rückgabewerte auswirken. Weitere Informationen zu Kompatibilitätsstufen finden Sie unter sp_dbcmptlevel (Transact-SQL).

Beispiele

A. Verwenden von SUBSTRING mit einer Zeichenfolge

Im folgenden Beispiel wird gezeigt, wie Sie nur einen Teil einer Zeichenfolge zurückgeben können. Diese Abfrage gibt aus der Contact-Tabelle den Nachnamen eines jeden Autors in einer Spalte und den ersten Buchstaben des entsprechenden Vornamens in der zweiten Spalte zurück.

USE AdventureWorks;
GO
SELECT LastName, SUBSTRING(FirstName, 1, 1) AS Initial
FROM Person.Contact
WHERE LastName like 'Barl%'
ORDER BY LastName;

Dies ist das Resultset.

LastName Initial

--------------------------------- -------

Barley R

Barlow B

(2 Zeile(n) betroffen)

So zeigen Sie den zweiten, dritten und vierten Buchstaben der Zeichenfolgenkonstanten abcdef an:

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

Dies ist das Resultset.

x

----------

bcd

(1 Zeile betroffen)

B. Verwenden von SUBSTRING mit text-, ntext- und image-Daten

HinweisHinweis

Um die folgenden Beispiele auszuführen, müssen Sie die pubs-Datenbank installieren. Informationen zum Installieren der pubs-Datenbank finden Sie unter Herunterladen der Beispieldatenbanken Northwind und pubs.

Im folgenden Beispiel wird gezeigt, wie die ersten 10 Zeichen aus jeder text- und image-Datenspalte in der pub_info-Tabelle der pubs-Datenbank zurückgegeben werden. text-Daten werden als varchar zurückgegeben, image-Daten als varbinary.

USE pubs;
SELECT pub_id, SUBSTRING(logo, 1, 10) AS logo, 
   SUBSTRING(pr_info, 1, 10) AS pr_info
FROM pub_info
WHERE pub_id = '1756';

Dies ist das Resultset.

pub_id logo pr_info

------ ---------------------- ----------

1756 0x474946383961E3002500 This is sa

(1 Zeile betroffen)

Im folgenden Beispiel wird die Wirkung von SUBSTRING auf text- und auf ntext-Daten gezeigt. Zunächst wird in diesem Beispiel eine neue Tabelle in der pubs-Datenbank namens npub_info erstellt. Im nächsten Schritt wird die Spalte pr_info in der npub_info-Tabelle aus den ersten 80 Zeichen der pub_info.pr_info-Spalte erstellt und ein ü als erstes Zeichen hinzugefügt. Abschließend ruft ein INNER JOIN alle Verleger-IDs sowie den SUBSTRING der text- und ntext-Spalten mit Verlegerinformationen ab.

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
         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');
INSERT npub_info values('0877', N'üThis is sample text data for Binnet & Hardley, publisher 0877 in the pubs databa');
INSERT npub_info values('1389', N'üThis is sample text data for Algodata Infosystems, publisher 1389 in the pubs da');
INSERT npub_info values('9952', N'üThis is sample text data for Scootney Books, publisher 9952 in the pubs database');
INSERT npub_info values('1622', N'üThis is sample text data for Five Lakes Publishing, publisher 1622 in the pubs d');
INSERT npub_info values('1756', N'üThis is sample text data for Ramona Publishers, publisher 1756 in the pubs datab');
INSERT npub_info values('9901', N'üThis is sample text data for GGG&G, publisher 9901 in the pubs database. GGG&G i');
INSERT npub_info values('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 pr INNER JOIN npub_info npr
   ON pr.pub_id = npr.pub_id
ORDER BY pr.pub_id ASC;