Partager via


SUBSTRING (Transact-SQL)

Retourne une partie d'une expression de type caractère, binaire, texte ou image. Pour plus d'informations sur les types de données SQL Server 2005 utilisables avec cette fonction, consultez Types de données (Transact-SQL).

Icône Lien de rubriqueConventions de la syntaxe de Transact-SQL

Syntaxe

SUBSTRING ( expression ,start , length )

Arguments

expression

Chaîne de caractères, chaîne binaire, texte, image, colonne, ou expression qui comprend une colonne. N'utilisez pas d'expression comprenant des fonctions d'agrégation.

start

Entier précisant où la sous-chaîne commence. start peut être de type bigint.

length

Entier positif indiquant combien de caractères ou d'octets de expression seront retournés. Si la valeur de length est négative, une erreur est retournée. length peut être de type bigint.

ms187748.note(fr-fr,SQL.90).gifRemarque :
Dans la mesure où start et length précisent le nombre d'octets, lorsque la fonction SUBSTRING est utilisée sur le type de données text avec le classement DBCS, tel que kanji, elle peut provoquer un fractionnement dans les caractères au début ou à la fin du résultat. Ce comportement est cohérent avec la manière dont READTEXT traite DBCS. Par conséquent, il est recommandé d'utiliser ntext au lieu de text pour les caractères DBCS. Une autre solution consiste à utiliser le type de données varchar(max) car il ne fractionne pas les caractères des classements DBCS.

Notes

Les décalages (start et length) qui utilisent les types de données ntext, char ou varchar doivent être spécifiés en nombre de caractères. Ceux qui utilisent des données de type text, image, binary ou varbinary doivent être spécifiés en nombre d'octets.

ms187748.note(fr-fr,SQL.90).gifRemarque :
Les niveaux de compatibilité peuvent affecter les valeurs retournées. Pour plus d'informations sur les niveaux de compatibilité, consultez sp_dbcmptlevel (Transact-SQL).

Types des valeurs renvoyées

Retourne des données de type caractère si expression correspond à l'un des types de données caractères pris en charge. Retourne des données de type binaire si expression correspond à l'un des types de données binary pris en charge.

La chaîne retournée est du même type que l'expression spécifiée sauf pour les exceptions énumérées dans le tableau suivant :

Expression spécifiée Type de la valeur renvoyée

char/varchar/text

varchar

nchar/nvarchar/ntext

nvarchar

binary/varbinary/image

varbinary

Exemples

A. Utilisation de SUBSTRING avec une chaîne de caractères

L'exemple suivant illustre la manière de retourner uniquement une partie d'une chaîne de caractères. À partir de la table Contact, cette requête retourne les noms de famille dans une colonne avec seulement la première initiale des prénoms dans la seconde colonne.

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

Voici l'ensemble des résultats. 

LastName   Initial
---------------------------------        -------
Barley     R
Barlow     B

(2 row(s) affected)

Voici comment afficher les deuxième, troisième et quatrième caractères de la constante de chaîne abcdef :

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

Voici l'ensemble des résultats. 

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

(1 row(s) affected)

B. Utilisation de SUBSTRING avec des données text, ntext et image

ms187748.note(fr-fr,SQL.90).gifRemarque :
Pour exécuter les exemples suivants, vous devez installer la base de données pubs. Pour plus d'informations sur l'installation de la base de données pubs, consultez Téléchargement des exemples de bases de données Northwind et pubs.

L'exemple suivant montre comment retourner les 200 premiers caractères de chaque colonne de données text et image de la table pub_info de la base de données pubs. Les données text sont retournées sous la forme de données varchar, tandis que les données image sont retournées sous la forme de données 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'

Voici l'ensemble des résultats. 

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

(1 row(s) affected)

L'exemple suivant illustre l'effet de SUBSTRING sur les données text et ntext. D'abord, cet exemple crée, dans la base de données pubs, une nouvelle table nommée npub_info. Ensuite, l'exemple crée la colonne pr_info dans la table npub_info à partir des 80 premiers caractères de la colonne pub_info.pr_info puis ajoute le caractère ü en guise de premier caractère. Enfin, une opération INNER JOIN extrait tous les numéros d'identification de serveur de publication et le SUBSTRING des deux colonnes d'information de serveur de publication text et ntext.

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

Voir aussi

Référence

Fonctions de chaîne (Transact-SQL)

Aide et Informations

Assistance sur SQL Server 2005