Como obter o primeiro caractere de uma string no SQL?

262

Eu tenho uma coluna SQL com um comprimento de 6. Agora, quero pegar apenas o primeiro caractere dessa coluna. Existe alguma função de string no SQL para fazer isso?

Vinod
fonte

Respostas:

436

LEFT(colName, 1)também fará isso também. É equivalente a SUBSTRING(colName, 1, 1).

Eu gosto LEFT, já que acho um pouco mais limpo, mas, realmente, não há diferença de qualquer maneira.

Eric
fonte
2
Não sei sobre o servidor SQL, mas logicamente um servidor de banco de dados pode otimizar a ESQUERDA melhor do que SUBSTRING quando estiver usando um índice.
thomasrutter
19
@thomasrutter, Olhando para um plano de execução, SQL Server (pelo menos 2008R2) traduz internamente LEFT(colName, length)em SUBSTRING(colName, 1, length). Portanto, não há otimizações aqui, é apenas uma preferência.
Alexander Abakumov
44

Eu prefiro:

SUBSTRING (my_column, 1, 1)

porque é a sintaxe padrão do SQL-92 e, portanto, mais portátil.


A rigor, a versão padrão seria

SUBSTRING (my_column FROM 1 FOR 1)

A questão é que a transformação de uma para a outra, portanto, para qualquer variação similar de fornecedor, é trivial.

ps Foi recentemente apontado para mim que as funções no SQL padrão são deliberadamente contrárias, por ter listas de parâmetros que não são os commalistas convencionais, a fim de torná-los facilmente identificáveis ​​como sendo do padrão!

um dia quando
fonte
1
Obrigado, LEFT (str, n) não é suportado por muitos formatos (incluindo o que estou usando).
GreySage
1
Por que o índice começa com 1 e não com 0? Isso retorna o mesmo resultado: SUBSTRING (minha_coluna, 1, 1) = SUBSTRING (minha_coluna, 0, 2). O que está na posição 0?
precisa saber é o seguinte
19

SUBSTRING ( MyColumn, 1 , 1 )para o primeiro caractere e SUBSTRING ( MyColumn, 1 , 2 )para os dois primeiros.

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

É simples de conseguir através do seguinte

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

Ou

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

@Result = his

ou

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

@Result = This i

jet_choong
fonte
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
fonte
2

Se você pesquisar o primeiro caractere de string na string Sql

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

=> return 4
LittleJC
fonte
2

Selecione os dois primeiros caracteres no campo selecionado com Left(string,Number of Char in int)

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