Usar funções escalares
As funções escalares retornam um único valor e geralmente funcionam em uma única linha de dados. O número de valores de entrada que eles usam pode ser zero (por exemplo, GETDATE), um (por exemplo, UPPER) ou múltiplo (por exemplo, ROUND). Como as funções escalares sempre retornam um único valor, elas podem ser usadas em qualquer lugar onde um único valor (o resultado) seja necessário. Eles são mais comumente usados em cláusulas SELECT e predicados de cláusulas WHERE. Eles também podem ser usados na cláusula SET de uma instrução UPDATE.
As funções escalares incorporadas podem ser organizadas em muitas categorias, como string, conversão, lógica, matemática e outras. Este módulo analisará algumas funções escalares comuns.
Algumas considerações ao usar funções escalares incluem:
- Determinismo: Se a função retorna o mesmo valor para o mesmo estado de entrada e banco de dados cada vez que é chamada, dizemos que é determinística. Por exemplo, ROUND(1.1, 0) sempre retorna o valor 1.0. Muitas funções internas são não determinísticas. Por exemplo, GETDATE() retorna a data e a hora atuais. Os resultados de funções não determinísticas não podem ser indexados, o que afeta a capacidade do processador de consultas de criar um bom plano para executar a consulta.
- Agrupamento: Ao usar funções que manipulam dados de caracteres, qual agrupamento será usado? Algumas funções usam o agrupamento (ordem de classificação) do valor de entrada; outros usam o agrupamento do banco de dados se nenhum agrupamento de entrada for fornecido.
Exemplos de funções escalares
No momento em que este artigo foi escrito, a Documentação Técnica do SQL Server listava mais de 200 funções escalares que abrangem várias categorias, incluindo:
- Funções de configuração
- Funções de conversão
- Funções do cursor
- Funções Date and Time
- Funções matemáticas
- Funções de metadados
- Funções de segurança
- Funções de cadeia
- Funções do sistema
- Funções estatísticas do sistema
- Funções de texto e imagem
Não há tempo suficiente neste curso para descrever cada função, mas os exemplos abaixo mostram algumas funções comumente usadas.
O exemplo hipotético a seguir usa várias funções de data e hora:
SELECT SalesOrderID,
OrderDate,
YEAR(OrderDate) AS OrderYear,
DATENAME(mm, OrderDate) AS OrderMonth,
DAY(OrderDate) AS OrderDay,
DATENAME(dw, OrderDate) AS OrderWeekDay,
DATEDIFF(yy,OrderDate, GETDATE()) AS YearsSinceOrder
FROM Sales.SalesOrderHeader;
Os resultados parciais são mostrados abaixo:
SalesOrderID
OrderDate
Ano da encomenda
EncomendarMês
OrderDay
OrdemDia da Semana
AnosadesOrdem
71774
2008-06-01T00:00:00
2008
Junho
1
Domingo
13
...
...
...
...
...
...
...
O próximo exemplo inclui algumas funções matemáticas:
SELECT TaxAmt,
ROUND(TaxAmt, 0) AS Rounded,
FLOOR(TaxAmt) AS Floor,
CEILING(TaxAmt) AS Ceiling,
SQUARE(TaxAmt) AS Squared,
SQRT(TaxAmt) AS Root,
LOG(TaxAmt) AS Log,
TaxAmt * RAND() AS Randomized
FROM Sales.SalesOrderHeader;
Resultados parciais:
TaxAmt
Arredondado
Piso
Ceiling
Ao quadrado
Raiz
Registo
Aleatorizado
70.4279
70.0000
70.0000
71.0000
4960.089098
8.392133221
4.254589491
28.64120429
...
..
...
...
...
...
...
...
O exemplo a seguir usa algumas funções de cadeia de caracteres:
SELECT CompanyName,
UPPER(CompanyName) AS UpperCase,
LOWER(CompanyName) AS LowerCase,
LEN(CompanyName) AS Length,
REVERSE(CompanyName) AS Reversed,
CHARINDEX(' ', CompanyName) AS FirstSpace,
LEFT(CompanyName, CHARINDEX(' ', CompanyName)) AS FirstWord,
SUBSTRING(CompanyName, CHARINDEX(' ', CompanyName) + 1, LEN(CompanyName)) AS RestOfName
FROM Sales.Customer;
Resultados parciais:
CompanyName
Maiúsculas
Minúsculas
Duração
Invertido
Primeiro Espaço
Primeira Palavra
RestOfName
Uma loja de bicicletas
UMA LOJA DE BICICLETAS
uma loja de bicicletas
12
erotS ekiB A
2
A
Loja de Bicicletas
Desportos Progressivos
DESPORTOS PROGRESSIVOS
desportos progressivos
18
stropS evissergorP
12
Progressivo
Desporto
Componentes Avançados para Bicicletas
COMPONENTES AVANÇADOS PARA BICICLETAS
Componentes avançados da bicicleta
24
stnenopmoC ekiB decnavdA
9
Avançado
Componentes da bicicleta
...
...
...
...
...
...
...
...
Funções lógicas
Outra categoria de funções permite determinar qual dos vários valores deve ser retornado. As funções lógicas avaliam uma expressão de entrada e retornam um valor apropriado com base no resultado.
IIF
A função IIF avalia uma expressão de entrada booleana e retorna um valor especificado se a expressão for avaliada como True e um valor alternativo se a expressão for avaliada como False.
Por exemplo, considere a consulta a seguir, que avalia o tipo de endereço de um cliente. Se o valor for "Escritório Principal", a expressão retornará "Faturamento". Para todos os outros valores de tipo de endereço, a expressão retorna "Mailing".
SELECT AddressType,
IIF(AddressType = 'Main Office', 'Billing', 'Mailing') AS UseAddressFor
FROM Sales.CustomerAddress;
Os resultados parciais desta consulta podem ter esta aparência:
AddressType
UseAddressFor
Escritório Principal
Faturação
Envio
Envio por correspondência
...
...
ESCOLHA
A função CHOOSE avalia uma expressão inteira e retorna o valor correspondente de uma lista com base em sua posição ordinal (baseada em 1).
SELECT SalesOrderID, Status,
CHOOSE(Status, 'Ordered', 'Shipped', 'Delivered') AS OrderStatus
FROM Sales.SalesOrderHeader;
Os resultados dessa consulta podem ter esta aparência:
SalesOrderID
Status
Estado da Encomenda
1234
3
Entregues
1235
2
Enviada
1236
2
Enviada
1237
1
Encomendado
...
...
...