Come ottenere il primo carattere di una stringa in SQL?


262

Ho una colonna SQL con una lunghezza di 6. Ora voglio prendere solo il primo carattere di quella colonna. C'è qualche funzione stringa in SQL per fare questo?

Risposte:


436

LEFT(colName, 1)farà anche questo. È equivalente a SUBSTRING(colName, 1, 1).

Mi piace LEFT, dato che lo trovo un po 'più pulito, ma in realtà, non c'è differenza in entrambi i modi.


2
Non conosco il server SQL, ma logicamente un server di database potrebbe essere in grado di ottimizzare LEFT meglio di SUBSTRING quando utilizza un indice.
thomasrutter,

19
@thomasrutter, Guardando un piano di esecuzione, SQL Server (almeno 2008R2) traduce internamente LEFT(colName, length)in SUBSTRING(colName, 1, length). Quindi non ci sono ottimizzazioni qui, è solo una preferenza.
Alexander Abakumov,

44

Preferisco:

SUBSTRING (my_column, 1, 1)

perché è sintassi SQL-92 standard e quindi più portabile.


A rigor di termini, la versione standard sarebbe

SUBSTRING (my_column FROM 1 FOR 1)

Il punto è che passare dall'una all'altra, quindi a qualsiasi variazione simile del venditore, è banale.

ps Mi è stato fatto notare solo di recente che le funzioni nello standard SQL sono deliberatamente contrarie, avendo elenchi di parametri che non sono i comunisti convenzionali, al fine di renderli facilmente identificabili come appartenenti allo standard!


1
Grazie, LEFT (str, n) non è supportato da molti formati (incluso quello che sto usando).
GreySage,

1
Perché l'indice inizia con 1 e non con 0? Questo restituisce lo stesso risultato: SUBSTRING (my_column, 1, 1) = SUBSTRING (my_column, 0, 2). Cosa c'è in posizione 0?
FrenkyB,

19

SUBSTRING ( MyColumn, 1 , 1 )per il primo personaggio e SUBSTRING ( MyColumn, 1 , 2 )per i primi due.



13

È semplice ottenere quanto segue

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

O

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

@Result = his

o

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

@Result = This i


3

INGRESSO

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

Se cerchi il primo carattere della stringa nella stringa Sql

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

=> return 4

2

Seleziona i primi due personaggi nel campo selezionato con Left(string,Number of Char in int)

SELECT LEFT(FName, 2) AS FirstName FROM dbo.NameMaster
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.