Em ambientes SQL Server, duas das muitas funções de string à nossa disposição são
LEFT()
e SUBSTRING()
. Essas funções fazem uma coisa semelhante, mas existem diferenças. Este artigo analisa algumas das principais diferenças entre essas funções.
Definição
Primeiro, vamos ver o que cada função faz:
LEFT()
- Retorna a parte esquerda de uma string de caracteres com o número especificado de caracteres.
SUBSTRING()
- Retorna parte de uma expressão de caractere, binário, texto ou imagem.
Então
LEFT()
retorna apenas a parte esquerda da string. SUBSTRING()
simplesmente retorna uma parte da expressão (não se limita apenas à parte esquerda – pode ser esquerda, direita ou em algum lugar no meio). Exemplo 1 - Mesmo resultado
Ambas as funções podem ser usadas para retornar um certo número de caracteres da esquerda.
SELECT LEFT('Buckethead', 6) AS [LEFT], SUBSTRING('Buckethead', 1, 6) AS [SUBSTRING];
Resultado:
+--------+-------------+ | LEFT | SUBSTRING | |--------+-------------| | Bucket | Bucket | +--------+-------------+
No entanto,
LEFT()
é mais conciso. Isso se deve em parte ao fato de que há menos caracteres no nome da função. Mas também é por causa da sintaxe. A
LEFT()
A função requer apenas dois argumentos (a expressão e o número de caracteres a serem retornados), enquanto SUBSTRING()
requer três argumentos (a expressão, a posição inicial e o número de caracteres para retornar dessa posição inicial). Exemplo 2 – Quando SUBSTRING é melhor
SUBSTRING()
é muito melhor que LEFT()
em pegar dados do meio da string. Na verdade, a esquerda não foi projetada para isso. Se você realmente quiser usar LEFT()
para fazer isso, você precisa fazer alguns truques, como usar um RIGHT()
função como seu primeiro argumento. Exemplo:
SELECT LEFT(RIGHT('Buckethead', 7), 3) AS [LEFT/RIGHT], SUBSTRING('Buckethead', 4, 3) AS [SUBSTRING];
Resultado:
+--------------+-------------+ | LEFT/RIGHT | SUBSTRING | |--------------+-------------| | ket | ket | +--------------+-------------+
Tipos de dados aceitos
A
LEFT()
função não aceita o texto e ntext tipos de dados como seu primeiro argumento. Ele suporta todos os outros tipos de dados que podem ser convertidos em varchar ou nvarchar . A
SUBSTRING()
por outro lado, aceita caractere , binário , texto , ntext e imagem expressões. Valores de retorno
LEFT()
retorna varchar quando o primeiro argumento é um tipo de dados de caractere não Unicode e nvarchar quando é um tipo de dados de caractere Unicode. Os valores de retorno para
SUBSTRING()
são como segue:Expressão (primeiro argumento) | Tipo de retorno |
---|---|
caracter /varchar /texto | varchar |
nchar /nvarchar /ntext | nvarchar |
binário /varbinário /imagem | varbinário |