Esse artigo faz parte da revista SQL Magazine edição 49. Clique aqui para ler todos os artigos desta edição

GN: left; mso-pagination: widow-orphan; mso-outline-level: body-text" align=left>SQL Server

Estudando funções T-SQL no SQL SERVER 2005

 

É engenheiro formado pela UNICAMP, consultor em TI com 15 anos de experiência, particularmente em projetos de Business Intelligence. Atualmente trabalha na IBM, onde atua como Líder de Time .NET em projeto internacional. Dedico à memória de Danielle, mãe dos meus filhos e que será sempre lembrada com muito carinho e saudade.

 

Quando a gente começa a trabalhar com bancos de dados, a idéia inicial é que vamos trabalhar com dados na forma bruta como eles são (ou serão) armazenados. Para nossa sorte, a SQL oferece inúmeros recursos para transformação dos dados.

No caso do Microsoft SQL SERVER, a linguagem usada é chamada Transact-SQL, ou apenas T-SQL.

O T-SQL inclui diversas categorias de funções internas, desde funções de agregação, passando por funções de manipulação de texto, data/hora, funções com informações do sistema, etc.

Neste artigo, vamos explorar alguns exemplos para ilustrar este potencial.

T-SQL, muito prazer

Ao longo das últimas décadas, os bancos de dados relacionais estabeleceram como padrão o uso da linguagem estruturada para consultas (ou simplesmente SQL, na sigla em inglês).

Cada banco de dados adota uma versão ligeiramente diferente da linguagem SQL. Porém, os conceitos principais seguem um padrão internacional. É por isso que uma sentença para extração de dados de uma tabela será praticamente idêntica, não importa se nosso banco de dados seja SQL SERVER, ORACLE, DB2, FIREBIRD, MYSQL ou qualquer outro banco relacional.

O T-SQL, adotado pelo SQL SERVER 2005, é uma versão estendida da linguagem. Isso quer dizer que ela respeita o padrão internacional e ainda inclui algumas funcionalidades próprias.

O nosso estudo aborda as bibliotecas de funções internas da T-SQL. Na realidade, abordaremos algumas das funções mais comuns, sendo que a maioria delas faz parte do padrão ANSI-92.

É importante observar que o padrão ANSI recomenda a existência de algumas funções básicas. Entretanto, isso não é uma garantia de que tais funções existam no sistema gerenciador de banco de dados que você está usando. A única garantia que temos é que as funções aqui apresentadas estão disponíveis no SQL SERVER (versão 7 ou superior).

Operadores da T-SQL

Antes de falarmos das funções, precisamos entender os operadores usados na T-SQL. Existem algumas categorias de operadores, como operadores lógicos, matemáticos, de comparação e assim por diante.

Entre os operadores matemáticos, temos a soma (+), subtração (-), multiplicação (*), divisão (/) e módulo (%).  Para quem não se lembra, módulo é o número inteiro que sobra de uma divisão.

Temos também o operador de atribuição (=), que é usado para se passar valores para uma variável.

Outro exemplo que exploraremos a seguir é o operador de concatenação de textos. Por simplicidade, este operador também usa o sinal de adição (+).

Sobre as cláusulas da T-SQL

Uma dúvida comum é: quais cláusulas aceitam o uso de operadores e/ou funções?

A resposta é: praticamente todas.

Podemos incluir operadores e funções em sentenças SQL de seleção de dados (SELECT), inserção (INSERT), atualização (UPDATE) e exclusão (DELETE).

Também podemos usar operadores e funções dentro das cláusulas SET, WHERE, HAVING, GROUP BY, ORDER BY e FROM (quando tivermos junções de tabelas). O SQL SERVER 2005 também os suporta em cláusulas TOP, o que, aliás, é uma das novidades do produto.

A Listagem 1 mostra um exemplo de SELECT que calcula o valor de um imposto, considerando que ele seja igual a 12% do valor da transação. Note que o valor da transação (ValorReal) está armazenado na tabela tblDemanda, enquanto que o imposto (Imposto) é calculado em tempo real.

 

Listagem 1. Uso de operadores em uma sentença SQL de seleção de dados.

SELECT T.fkProduto, T.Data, T.ValorReal, (0.12 * T.ValorReal) AS Imposto

FROM tblDemanda AS T

 

Ainda sobre a Listagem 1, devemos observar que os parênteses são opcionais e foram incluídos na sentença apenas por uma questão didática.

Para simplificar, todos os exemplos que apresentaremos serão aplicados a sentenças do tipo SELECT.

Funções internas da T-SQL

A T-SQL oferece uma grande quantidade de funções. Temos diversas funções de sistema, que retornam informações como nome do servidor, nome do usuário ativo, nome do banco de dados em uso, etc. Funções de metadados, que retornam informações sobre os dados com os quais estamos trabalhando. Funções de agregação, usadas em sentenças que incluem uma cláusula GROUP BY.

Nosso artigo se concentra sobre quatro categorias de funções: as matemáticas, as de manipulação de data/hora, as de tratamento de texto (ou cadeias de caracteres, para ser preciso) e as funções de sistema.

Nos nossos exemplos, usaremos a base de dados “Farmaceutico”, que armazena informações de demanda de produtos farmacêuticos. O diagrama desta base é exibido na Figura 1.

 

Figura 1. Diagrama do banco de dados “Farmaceutico”.

 

Quando precisar usar funções no T-SQL, pesquise o Books Online antes de tudo. A gama de funções oferecidas é muito grande e provavelmente haverá funções internas que o ajudarão a realizar a sua tarefa.

Funções matemáticas

Temos mais de vinte funções matemáticas disponíveis no T-SQL. São funções matemáticas simples, como exponenciação (POWER), arredondamento (ROUND, FLOOR, CEILING) e geração de números aleatórios (RAND).

Vamos estudar duas funções matemáticas: ROUND e RAND.

·         ROUND: arredonda um valor para um determinado número de casas decimais. Ela usa dois argumentos: o primeiro é a expressão numérica que será arredonda e o segundo é o número de casas decimais a ser considerado. Observe que falamos de uma “expressão numérica” como primeiro argumento, porque podemos considerar um cálculo qualquer, cujo resultado será então arredondado.

·         RAND: gera um número aleatório entre 0 e 1. Ao incluirmos uma chamada à função RAND, teremos sempre um único resultado, não importa quantos registros estivermos selecionando.

 

No exemplo que veremos na seqüência, vamos gerar registros com valores aleatórios para um determinado campo. Pessoalmente, eu sempre uso esta técnica quando tenho uma tabela com poucos registros e preciso gerar uma massa de dados maior. Veja na Listagem 2 a declaração SQL que gera os dados que são exibidos na Tabela 1.

 

Listagem 2. Usando funções matemáticas para gerar valores aleatórios.

SELECT T.fkProduto, T.Data, T.ValorReal,

     ROUND ((RAND() * T.ValorReal) , 2 ) AS ValorRealAleatorio

FROM tblDemanda AS T

 

fkProduto

Data

ValorReal

ValorRealAleatorio

221720

01/04/2004

...
Quer ler esse conteúdo completo? Tenha acesso completo