¿Cómo obtener el primer carácter de una cadena en SQL?

262

Tengo una columna SQL con una longitud de 6. Ahora quiero tomar solo el primer carácter de esa columna. ¿Hay alguna función de cadena en SQL para hacer esto?

Vinod
fuente

Respuestas:

436

LEFT(colName, 1)también hará esto, también. Es equivalente a SUBSTRING(colName, 1, 1).

Me gusta LEFT, ya que me parece un poco más limpio, pero en realidad, no hay diferencia en ambos sentidos.

Eric
fuente
2
No sé sobre el servidor SQL, pero lógicamente un servidor de base de datos puede optimizar IZQUIERDA mejor que SUBSTRING cuando está usando un índice.
thomasrutter
19
@thomasrutter, Al mirar un plan de ejecución, SQL Server (al menos 2008R2) se traduce internamente LEFT(colName, length)en SUBSTRING(colName, 1, length). Entonces no hay optimizaciones aquí, es solo una preferencia.
Alexander Abakumov
44

Yo prefiero:

SUBSTRING (my_column, 1, 1)

porque es la sintaxis estándar SQL-92 y, por lo tanto, es más portátil.


Estrictamente hablando, la versión estándar sería

SUBSTRING (my_column FROM 1 FOR 1)

El punto es que la transformación de uno a otro, por lo tanto, a cualquier variación de proveedor similar, es trivial.

PD: Hace poco me señalaron que las funciones en SQL estándar son deliberadamente contrarias, al tener listas de parámetros que no son los commalists convencionales, para que puedan identificarse fácilmente como estándar.

un día cuando
fuente
1
Gracias, IZQUIERDA (str, n) no es compatible con muchos formatos (incluido el que estoy usando).
GreySage
1
¿Por qué el índice comienza con 1 y no con 0? Esto devuelve el mismo resultado: SUBSTRING (my_column, 1, 1) = SUBSTRING (my_column, 0, 2). ¿Qué es en la posición 0?
FrenkyB
19

SUBSTRING ( MyColumn, 1 , 1 )para el primer personaje y SUBSTRING ( MyColumn, 1 , 2 )para los dos primeros.

Damovisa
fuente
14
SELECT SUBSTR(thatColumn, 1, 1) As NewColumn from student
Devendra Verma
fuente
13

Es simple de lograr por lo siguiente

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

Ya sea

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

@Result = his

o

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

@Result = This i

jet_choong
fuente
3

ENTRADA

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
fuente
2

Si busca el primer carácter de cadena en cadena SQL

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

=> return 4
LittleJC
fuente
2

Seleccione los dos primeros caracteres en el campo seleccionado con Left(string,Number of Char in int)

SELECT LEFT(FName, 2) AS FirstName FROM dbo.NameMaster
Darshan
fuente