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?

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.


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!


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.



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


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

2

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

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

=> return 4

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.