314 votes

Comment obtenir le premier caractère d'une chaîne de caractères en SQL ?

J'ai une colonne SQL avec une longueur de 6. Je veux maintenant prendre seulement le premier caractère de cette colonne. Existe-t-il une fonction de chaîne dans SQL pour faire cela ?

515voto

Eric Points 35647

LEFT(colName, 1) le fera également. C'est l'équivalent de SUBSTRING(colName, 1, 1) .

J'aime LEFT car je le trouve un peu plus propre, mais en fait, il n'y a pas de différence entre les deux.

2 votes

Je ne connais pas le serveur SQL, mais en toute logique, un serveur de base de données peut être capable d'optimiser LEFT mieux que SUBSTRING lorsqu'il utilise un index.

25 votes

@thomasrutter, En regardant un plan d'exécution, SQL Server (au moins 2008R2) traduit en interne LEFT(colName, length) en SUBSTRING(colName, 1, length) . Donc il n'y a pas d'optimisations ici, c'est juste une préférence.

56voto

onedaywhen Points 24594

Je préfère :

SUBSTRING (my_column, 1, 1)

parce que c'est la syntaxe standard de SQL-92 et qu'elle est donc plus portable.


Strictement parlant, la version standard serait la suivante

SUBSTRING (my_column FROM 1 FOR 1)

Le fait est que la transformation de l'un à l'autre, et donc à toute variation similaire du fournisseur, est triviale.

p.s. Ce n'est que récemment qu'on m'a fait remarquer que les fonctions du SQL standard sont délibérément contraires, en ayant des listes de paramètres qui ne sont pas les commalistes conventionnels, afin de les rendre facilement identifiables comme étant du standard !

1 votes

Merci, LEFT(str, n) n'est pas supporté par de nombreux formats (y compris celui que j'utilise).

1 votes

Pourquoi l'index commence-t-il par 1 et non par 0 ? Ceci renvoie le même résultat : SUBSTRING (ma_colonne, 1, 1) = SUBSTRING (ma_colonne, 0, 2). Qu'est-ce qui se trouve en position 0 ?

21voto

Damovisa Points 6756

SUBSTRING ( MyColumn, 1 , 1 ) pour le premier caractère et SUBSTRING ( MyColumn, 1 , 2 ) pour les deux premiers.

14voto

Devendra Verma Points 171
SELECT SUBSTR(thatColumn, 1, 1) As NewColumn from student

3voto

LittleJC Points 48

Si vous recherchez le premier caractère de la chaîne de caractères dans Sql string

SELECT CHARINDEX('char', 'my char')

=> return 4

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X