Utilizar funções escalares

Concluído

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 elas assumem podem ser zero (por exemplo, GETDATE), um (por exemplo, UPPER) ou vários (por exemplo, ROUND). Como as funções escalares sempre retornam um único valor, elas podem ser usadas em qualquer lugar e um único valor (o resultado) é necessário. Elas são usadas com mais frequência em cláusulas SELECT e predicados de cláusula WHERE. Elas também podem ser usadas na cláusula SET de uma instrução UPDATE.

As funções escalares internas podem ser organizadas em várias categorias, como cadeia de caracteres, conversão, lógica, matemática e outras. Este módulo vai ver algumas funções escalares comuns.

Dentre as considerações ao usar funções escalares estão:

  • Determinismo:se a função retornar o mesmo valor para o mesmo estado de entrada e banco de dados sempre que for chamada, dizemos que ela é 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 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.
  • Ordenação:ao usar funções que manipulam dados de caracteres, qual ordenação será usada? Algumas funções usam a ordenação (ordem de classificação) do valor de entrada, outras usam a colagem do banco de dados se não for fornecida nenhuma ordenação de entrada.

Exemplos de função escalar

No momento da redação deste manual, a SQL Server Technical Documentation 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 de cursor
  • Funções de data e hora
  • Funções matemáticas
  • Funções de metadados
  • Funções de segurança
  • Funções de cadeia de caracteres
  • Funções do sistema
  • Funções estatísticas de sistema
  • Funções de texto e imagem

Não há tempo suficiente neste curso para descrever cada função, mas os exemplos a seguir 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;

Abaixo são mostrados resultados parciais:

SalesOrderID

OrderDate

OrderYear

OrderMonth

OrderDay

OrderWeekDay

YearsSinceOrder

71774

2008-06-01T00:00:00

2008

Junho

1

Sunday

13

...

...

...

...

...

...

...

O exemplo a seguir 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

Quadrado

Root

Registro

Aleatória

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

UpperCase

LowerCase

Comprimento

Reversed

FirstSpace

FirstWord

RestOfName

Uma Loja de Bicicletas

UMA LOJA DE BICICLETAS

uma loja de bicicletas

12

erotS ekiB A

2

A

Loja de bicicletas

Progressive Sports

ESPORTES PROGRESSIVOS

ESPORTES PROGRESSIVOS

18

stropS evissergorP

12

Progressivo

Esportes

Advanced Bike Components

COMPONENTES DE BICICLETAS AVANÇADOS

componentes de bicicletas avançados

24

stnenopmoC ekiB decnavdA

9

Avançado

Componentes de 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 Truee 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á "Cobrança". Para todos os outros valores de tipo “endereço”, a expressão retorna "Mailing".

SELECT AddressType,
      IIF(AddressType = 'Main Office', 'Billing', 'Mailing') AS UseAddressFor
FROM Sales.CustomerAddress;

Os resultados parciais dessa consulta podem ter a seguinte aparência:

AddressType

UseAddressFor

Escritório Principal

Cobrança

Remessa

Postagem

...

...

CHOOSE

A função CHOOSE avalia uma expressão integral 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 a seguinte aparência:

SalesOrderID

Status

OrderStatus

1234

3

Entregue

1235

2

Enviado

1236

2

Enviado

1237

1

Encomendado

...

...

...