SUBSTRING (Transact-SQL)

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

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

SUBSTRING ( expression ,start , length )

Argumente

Ausdruck (expression)

Eine Zeichenfolge, eine binäre Zeichenfolge, Text, Bild, eine Spalte oder ein Ausdruck, in der bzw. in dem eine Spalte enthalten ist. Verwenden Sie keine Ausdrücke, die Aggregatfunktionen enthalten.

start

Eine ganze Zahl, die den Beginn der Teilzeichenfolge angibt. start kann vom bigint-Datentyp sein.

length

Eine positive ganze Zahl, die angibt, wie viele Zeichen oder Bytes aus expression zurückgegeben werden. Wenn lengthnegativ ist, wird eine Fehlermeldung zurückgegeben. lengthkann vom bigint-Datentyp sein.

ms187748.note(de-de,SQL.90).gifHinweis:
Da start und length die Anzahl von Bytes angeben, wenn SUBSTRING für den text-Datentyp verwendet wird, kann dies bei DBCS-Sortierungen, wie z. B. Kanji, zu geteilten Zeichen am Anfang oder Ende des Ergebnisses führen. Dieses Verhalten ist konsistent zu der Art und Weise, in der DBCS durch READTEXT behandelt wird. Aus diesem Grund wird empfohlen, ntext anstelle von text für DBCS-Zeichen zu verwenden. Als weitere Alternative bietet sich an, den varchar(max)-Datentyp zu verwenden, da er keine Zeichen für DBCS-Sortierungen teilt.

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

Offsets (start und length), die die Datentypen ntext, char oder varchar verwenden, müssen als Anzahl von Zeichen angegeben werden. Offsets, die die Datentypen text, image, binary oder varbinary verwenden, müssen als Anzahl von Bytes angegeben werden.

ms187748.note(de-de,SQL.90).gifHinweis:
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 row(s) affected)

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 row(s) affected)

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

ms187748.note(de-de,SQL.90).gifHinweis:
Sie müssen die pubs-Datenbank installieren, um das folgende Beispiel auszuführen. Informationen zum Installieren der pubs-Datenbank finden Sie unter Downloaden der Beispieldatenbanken Northwind und pubs.

Im folgenden Beispiel wird gezeigt, wie die ersten 200 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 row(s) affected)

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

Siehe auch

Verweis

Zeichenfolgenfunktionen (Transact-SQL)

Hilfe und Informationen

Informationsquellen für SQL Server 2005