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


262

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

Réponses:


436

LEFT(colName, 1)fera également cela. C'est équivalent à SUBSTRING(colName, 1, 1).

J'aime LEFT, car je le trouve un peu plus propre, mais vraiment, il n'y a aucune différence de toute façon.


2
Je ne connais pas SQL Server, mais logiquement, un serveur de base de données peut être en mesure d'optimiser LEFT mieux que SUBSTRING lorsqu'il utilise un index.
thomasrutter

19
@thomasrutter, En regardant un plan d'exécution, SQL Server (au moins 2008R2) se traduit LEFT(colName, length)en interne par SUBSTRING(colName, 1, length). Il n'y a donc aucune optimisation ici, c'est juste une préférence.
Alexander Abakumov,

44

Je préfère:

SUBSTRING (my_column, 1, 1)

car il s'agit de la syntaxe Standard SQL-92 et donc plus portable.


À strictement parler, la version standard serait

SUBSTRING (my_column FROM 1 FOR 1)

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

ps On m'a fait remarquer récemment que les fonctions en SQL standard sont délibérément contraires, en ayant des listes de paramètres qui ne sont pas les commalistes classiques, afin de les rendre facilement identifiables comme étant du standard!


1
Merci, LEFT (str, n) n'est pas pris en charge par de nombreux formats (y compris celui que j'utilise).
GreySage

1
Pourquoi l'index commence-t-il par 1 et non par 0? Cela renvoie le même résultat: SUBSTRING (my_column, 1, 1) = SUBSTRING (my_column, 0, 2). Qu'est-ce que c'est en position 0?
FrenkyB

19

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



13

Il est simple à réaliser par les éléments suivants

DECLARE @SomeString NVARCHAR(20) = 'This is some string'
DECLARE @Result NVARCHAR(20)

Soit

SET @Result = SUBSTRING(@SomeString, 2, 3)
SELECT @Result

@Result = his

ou

SET @Result = LEFT(@SomeString, 6)
SELECT @Result

@Result = This i


3

CONTRIBUTION

STRMIDDLENAME
--------------
Aravind Chaterjee
Shivakumar
Robin Van Parsee

SELECT STRMIDDLENAME, 
CASE WHEN INSTR(STRMIDDLENAME,' ',1,2) != 0 THEN SUBSTR(STRMIDDLENAME,1,1) || SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,1)+1,1)||
SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,2)+1,1)
WHEN INSTR(STRMIDDLENAME,' ',1,1) != 0 THEN SUBSTR(STRMIDDLENAME,1,1) || SUBSTR(STRMIDDLENAME,INSTR(STRMIDDLENAME,' ',1,1)+1,1)
ELSE SUBSTR(STRMIDDLENAME,1,1)
END AS FIRSTLETTERS
FROM Dual;

OUTPUT
STRMIDDLENAME                    FIRSTLETTERS
---------                        -----------------
Aravind Chaterjee                AC           
Shivakumar                       S
Robin Van Parsee                 RVP

2

Si vous recherchez le premier caractère de la chaîne dans la chaîne SQL

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

=> return 4

2

Sélectionnez les deux premiers caractères dans le champ sélectionné avec Left(string,Number of Char in int)

SELECT LEFT(FName, 2) AS FirstName FROM dbo.NameMaster
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.