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?

Vinod
la source

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.

Eric
la source
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!

un jour
la source
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.

Damovisa
la source
14
SELECT SUBSTR(thatColumn, 1, 1) As NewColumn from student
Devendra Verma
la source
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

jet_choong
la source
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
Shiv
la source
2

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

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

=> return 4
LittleJC
la source
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
Darshan
la source