Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

LEFT() vs SUBSTRING() no SQL Server:Qual é a diferença?


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