Você está na página 1de 13

SQL - Structured Query Language

Introduo Quando os Bancos de Dados Relacionais estavam sendo desenvolvidos, foram criadas linguagens destinadas sua manipulao. O Departamento de Pesquisas da IBM, desenvolveu a SQL como forma de interface para o sistema de BD relacional denominado SYSTEM R, no incio dos anos 70. Em 1986 o American National Standard Institute (ANSI), publicou um padro SQL. A linguagem SQL estabeleceu-se como padro de acesso a Dados Relacionais. Bancos de

SQL apresenta uma srie de comandos que permitem a definio dos dados, chamada de DDL (Data Definition Language), composta entre outros pelos comandos Create, que destinado a criao do Banco de Dados, das Tabelas que o compe, alm das relaes existentes entre as tabelas. Como exemplo de comandos da classe DDL temos os comandos Create, Alter e Drop. Os comandos da srie DML (Data Manipulation Language), destinados a consultas, inseres, excluses e alteraes em um ou mais registros de uma ou mais tabelas de maneira simultnea. Como exemplo de comandos da classe DML temos os comandos Select, Insert, Update e Delete. Uma subclasse de comandos DML, a DCL (Data Control Language), dispe de comandos de controle como Grant e Revoke. A Linguagem SQL tem como grandes virtudes sua capacidade de gerenciar ndices, sem a necessidade de controle individualizado do ndice corrente, algo muito comum nas linguagens de manipulao de dados do tipo registro a registro. Outra caracterstica muito importante disponvel em SQL sua capacidade de construo de vises, que so formas de visualizarmos os dados na forma de listagens independente das tabelas e organizao lgica dos dados. Outra caracterstica interessante na linguagem SQL a capacidade que dispomos de cancelar uma srie de atualizaes ou de as gravarmos, depois de iniciarmos uma seqncia de atualizaes. Os comandos Commit e Rollback so responsveis por estas facilidades. Devemos notar que a linguagem SQL consegue implementar estas solues, somente pelo fato de estar baseada em Banco de Dados, que garantem por si mesmo a integridade das relaes existentes entre as tabelas e seus ndices.

Parte I - Comandos de Consulta ao Esquema Devemos ressaltar que a linguagem SQL utilizada tanto pelos profissionais responsveis pelos dados, onde ressaltada a figura do Administrador do Banco de Dados e dos Analistas de Dados, como tambm pelos desenvolvedores de Aplicaes. Enquanto queles esto preocupados com o desempenho, integridade do Banco de Dados e utilizam toda gama de recursos disponveis no SQL, estes esto preocupados apenas em "transformar dados em informaes", portanto para os desenvolvedores costuma-se dizer que conhecer o "select" j basta. Em nosso curso enfatizaremos a importncia de TODOS os comandos do SQL, mas sabemos de antemo que os professores responsveis pelas linguagens IDEO, VB e Delphi, ressaltaro a preponderncia da instruo "select", que ser apresentada a seguir e no no final do curso de SQL como geralmente acontece, pelo fato de que diversas disciplinas necessitam especificamente deste comando, que passaremos a apresentar: 1. Recuperao todos os campos Departamentos: Soluo: SELECT * FROM DEPTO O exemplo utiliza o curinga "*" para selecionar as colunas na ordem em que foram criadas. A instruo Select, como podemos observar recupera um grupo de registros de uma (ou mais) tabela(s) e ao a instruo From determina de qual(is) tabela(s) sero recuperados os registros, neste caso a tabela DEPTO. Where na restrio das tuplas (regsitros ou linhas) que devero ser recuperadas A clusula "where" corresponde ao operador de restrio da lgebra relacional. Contm a condio que as tuplas devem satisfazer a fim de serem recuperadas. Ela pode comparar valores em colunas, literais, expresses aritmticas ou funes. A seguir apresesntamos operadores lgicos e complementares a serem utilizados nas expresses apresentadas em where. 2. Operadores lgicos operador = > >= < <= Exemplos: a) SELECT FROM WHERE b) SELECT FROM WHERE significado igual a maior que maior que ou igual a menor que menor que ou igual a (ou colunas) da tabela de

EMPNOME, EMPSERV EMP DEPNUME > 10 EMPNOME, EMPSERV EMP EMPSERV = 'GERENTE'

O conjunto de caracteres ou datas devem estar entre apstrofes ( tambm chamados "plicas" ou "plics") na clusula "where".

2.1. Recupere todos os departamentos cujo oramento mensal seja maior que 100.000. Recupere o Nome do departamento e seu oramento anual, que obtido atravs da multiplicao do valor oramento mensal por 12. Soluo: Neste problema precisamos de uma expresso que a combinao de um ou mais valores, operadores ou funes que resultaro em um valor. Esta expresso poder conter nomes de colunas, valores numricos, constantes e operadores aritmticos. SELECT DEPNOME, DEPORCA * 12 FROM DEPT WHERE DEPORCA > 100000 2.2. Utiliza a query anterior, porm ao invs dos "feios" DepNome e DepOrca, podemos utilizar nomes mais inteligveis como por exemplo: Ttulos Departamento e Oramento. Soluo: Neste exemplo deveremos denominar colunas por apelidos. Os nomes das colunas mostradas por uma consulta, so geralmente os nomes existentes no Dicionrio de Dado, porm geralmente esto armazenados na forma do mais puro "informatiqus", onde "todo mundo" sabe que CliCodi significa Cdigo do Cliente. possvel (e provvel) que o usurio desconhea estes smbolos, portanto devemos os apresentar dando apelidos s colunas "contaminadas" pelo informatiqus, que apesar de fundamental para os analistas, somente so vistos como enigmas para os usurios. SELECT DEPNOME "DEPARTAMENTO", DEPORCA * 12 "ORCAMENTO ANUAL" FROM DEPT WHERE DEPORCA > 100000 3. Recupere todos os salrios existentes permitindo registros em duplicidades. na empresa, no

Soluo: A clusula Distinct elimina duplicidades, significando que somente relaes distintas sero apresentadas como resultado de uma pesquisa. SELECT DISTINCT EMPSERV FROM EMP 4. Recupere todos os dados dos empregados, considerando sua existncia fsica diferente de sua existncia lgica (ou seja devidamente inicializado). Soluo: Desejamos um tratamento diferenciado para valores nulos. Qualquer coluna de uma tupla que no contenha informaes denominada de nula, portanto informao no existente. Isto no o mesmo que "zero", pois zero um nmero como outro qualquer, enquanto que um valor nulo utiliza um "byte" de armazenagem interna e so tratados de forma diferenciada pelo SQL. a) SELECT FROM b) SELECT FROM EMPNOME, EMPSALA + EMPCOMI EMP EMPNOME, NVL(EMPSALA,0) + NVL(EMPCOMI,0) EMP

NOTA - a funo "NVL" utilizada para converter valores nulos em zeros.

5. Recupere os nomes e funes da cada funcionrio contidos na tabela empresa, porm classificados alfabeticamente (A..Z) e depois alfabeticamente invertido (Z..A). Soluo: A clusula order by modificar a ordem de apresentao do resultado da pesquisa (ascendente ou descendente). a) SELECT FROM ORDER b) SELECT FROM ORDER EMPNOME, EMPSERV EMP BY EMPNOME EMPNOME, EMPSERV EMP BY EMPPNOME DESC

NOTA - Tambm possvel fazer com que o resultado da pesquisa venha classificado por vrias colunas. Sem a clusula "order by" as linhas sero exibidas pela ordem definida pelo primeiro campo definido como primary key, quando da criao da tabela. 6. Selecione os Nomes dos Departamentos que estejam na So Paulo. Exemplos: SELECT DEPNOME FROM DEPT WHERE DEPLOCA = "SAO PAULO" O exemplo exigiu uma restrio (So Paulo) que nos obrigou a utilizar a instruo Where. Alguns analistas costumam brincar utilizando-se da expresso : "Selecione algo De algum lugar Onde se verificam tais relaes", para descrever a estrutura do SQL. Demais Operadores Operador between like is null Exemplos: a) SELECT FROM WHERE b) SELECT FROM WHERE c) SELECT FROM WHERE d) SELECT FROM WHERE ... in ( .... ) Significado and ... entre dois valores (inclusive) lista de valores com um padro de caracteres um valor nulo

EMPNOME, EMPSALA EMP EMPSALA BETWEEN 500 EMPNOME, DEPNUME EMP DEPNUME IN(10,30) EMPNOME, EMPSERV EMP EMPNOME LIKE 'F%' EMPNOME, EMPSERV EMP EMPCOMI IS NULL

AND

1000

O smbolo "%" pode ser usado para construir a pesquisa ("%" = qualquer seqncia de nenhum at vrios caracteres).

7. Operadores Negativos Operador <> Not "nome_campo" = Not "nome_campo" > Not between Not in Not like is not null significado diferente diferente da coluna no maior que no existe entre dois valores informados no existente numa dada lista de valores diferente do padro de caracteres informado no um valor nulo

7.1. Selecione os Empregados cujos salrios sejam menores que 1000 ou maiores que 3500. Exemplos: SELECT EMPNOME, EMPSALA FROM EMP WHERE EMPSALA NOT BETWEEN 1000 AND 3500 7.2. Recupere todos os funcionrios com salrios entre 200 e 700 e que sejam Vendedores. Exemplos: SELECT EMPNOME, EMPSALA, EMPSERV FROM EMP WHERE EMPSALA BETWEEN 700 AND 2000 AND EMPSERV = 'VENDEDOR' 7.3. Recupere todos os funcionrios com salrios entre 200 e 700 ou que sejam Vendedores. Exemplos: SELECT EMPNOME, EMPSALA, EMPSERV FROM EMP WHERE EMPSALA BETWEEN 700 AND 2000 OR EMPSERV = 'VENDEDOR' 7.4. Recupere todos os funcionrios com salrios entre 2000 e 700 e que sejam Vendedores ou Balconistas. Exemplos: SELECT EMPNOME, EMPSALA, EMPSERV FROM EMP WHERE EMPSALA BETWEEN 700 AND 2000 AND (EMPSERV = 'BALCONISTA' OR EMPSERV = 'VENDEDOR')

8. Funes de Caracteres Funo Lower Upper Concat(x,y) Substring(x,y,str) To_Char(num) To_Date(char,fmt) ^Q 8.1. Recupere Significado fora caracteres maisculos aparecerem em minsculos fora caracteres minsculos aparecerem em maisculos concatena a string "x" com a string "y" extrai um substring da string "str", comeando em "x", e termina em "y" converte um valor numrico para uma string de caracteres converte uma string caracter em uma data converte data para o formato apresentado o nome de todos os empregados em letras minsculas.

Exemplos: SELECT LOWER(EMPNOME) FROM EMP 8.2. Recupere o nome primeiras letras). de todos os empregados (somente as 10

Exemplos: SELECT SUBSTRING (1,10,EMPNOME) FROM EMP 8.3. Recupere Exemplos: a) SELECT FROM WHERE b) SELECT FROM WHERE o nome de todos os empregados admitidos em 01/01/80. * EMP EMPADMI = * EMP EMPADMI =

^Q"DD-AAA-YYYY"("01-JAN-1980") ^Q("01-JAN-1980")

9. Funes Agregadas (ou de Agrupamento) Funo avg(n) count(expr) max(expr) min(expr) sum(n) Retorno mdia do valor n, ignorando nulos vezes que o nmero da expr avalia para algo no nulo maior valor da expr menor valor da expr soma dos valores de n, ignorando nulos

9.1. Recupere a Mdia, o Maior, o Menor e tambm a Somatria dos Salrios pagos aos empregados. Exemplos: SELECT AVG(EMPSALA) FROM EMP SELECT MIN(EMPSALA) FROM EMP SELECT MAX(EMPSALA) FROM EMP SELECT SUM(EMPSALA) FROM EMP

10. Agrupamentos As funes de grupo operam sobre grupos de tuplas(linhas). Retornam resultados baseados em grupos de tuplas em vez de resultados de funes por tupla individual. A clasula "group by" do comando "select" utilizada para dividir tuplas em grupos menores. A clusula "GROUP BY" pode ser usada para dividir as tuplas de uma tabela em grupos menores. As funes de grupo devolvem uma informao sumarizada para cada grupo. 10.1. Recupere a mdia de salrio pagos por departamento.

Soluo: SELECT DUPNUME, AVG(EMPSALA) FROM EMP GROUP BY DEPNUME NOTA - Qualquer coluna ou expresso na lista de seleo, que no for uma funo agregada, dever constar da clasula "group by". Portanto errado tentar impor uma "restrio" do tipo agregada na clusula Where. 11. Having A clusula "HAVING" pode ser utilizada para especificar grupos devero ser exibidos, portanto restringindo-os. 11.1. Retome o problema anterior, porm Recupere para departamentos com mais de 10 empregados. Soluo: SELECT DEPNUME, AVG(EMPSALA) FROM EMP GROUP BY DEPNUME HAVING COUNT(*) > 10 NOTA - A clasula "group by" deve ser colocada antes da "having", pois os grupos so formados e as funes de grupos so calculadas antes de se resolver a clusula "having". A clusula "where" no pode ser utilizada para restringir grupos que devero ser exibidos. Exemplificando ERRO tpico - Restringindo Mdia Maior que 1000: Errado: SELECT DEPNUME, AVG(EMPSALA) FROM EMP WHERE AVG(SALARIO) > 1000 GROUP BY DEPNUME Correto: SELECT DEPNUME, AVG(EMPSALA) FROM EMP GROUP BY DEPNUME HAVING AVG(EMPSALA) > 1000 quais

Soluo apenas

12. Hierarquia em uma "query": SELECT FROM WHERE GROUP BY HAVING ORDER BY coluna(s) tabela(s) condio(es) da(s) tupla(s) condio(es) do(s) grupo(s) de tupla(s) condio(es) do(s) grupo(s) de tupla(s) coluna(s);

A "SQL" far a seguinte avaliao: a) WHERE, para estabelecer tuplas individuais pode conter funes de grupo) b) GROUP BY, para fixar grupos. c) HAVING, para selecionar grupos para exibio. 13. Equi-Juno ( Juno por igualdade ) O relacionamento existente entre tabelas chamado de equi-juno, pois os valores de colunas das duas tabelas so iguais. A Equijuno possvel apenas quando tivermos definido de forma adequada a chave estrangeira de uma tabela e sua referncia a chave primria da tabela precedente. Apesar de admitir-se em alguns casos, a equijuno de tabelas, sem a correspondncia Chave Primria - Chave Estrangeira, recomendamos fortemente ao estudante no utilizar este tipo de construo, pois certamente em nenhum momento nos exemplos propostos em nossa disciplina ou nas disciplinas de Anlise e Projeto de Sistemas, sero necessrias tais junes. 14. Listar Nomes de Empregados, Cargos e Nome do Departamento onde o empregado trabalha. Soluo: Observemos que dois dos trs dados solicitados esto na Tabela Emp, enquanto o outro dado est na Tabela Dept. Deveremos ento acessar os dados restringindo convenientemente as relaes existentes entre as tabelas. De fato sabemos que DEPNUME chave primria da tabela de Departamentos e tambm chave estrangeira da Tabela de Empregados. Portanto, este campo ser o responsvel pela equijuno. SELECT A.EMPNOME, A.EMPSERV, B.DEPNOME FROM EMP A, DEPT B WHERE A.DEPNUME = B.DEPNUME NOTA - Note que as tabelas quando contm colunas com o mesmo nome, usa-se um apelido "alias" para substituir o nome da tabela associado a coluna. Imagine que algum tivesse definido NOME para ser o Nome do Empregado na Tabela de Empregados e tambm NOME para ser o Nome do Departamento na Tabela de Departamentos. Tudo funcionaria de forma adequada, pois o alis se encarregaria de evitar que uma ambigidade fosse verificada. Embora SQL resolva de forma muito elegante o problema da nomenclatura idntica para campos de tabelas, recomendamos que o estudante fortemente evite tal forma de nomear os campos. O SQL nunca confundir um A.NOME com um B.NOME, porm podemos afirmar o mesmo de ns mesmos? candidatas (no

15. Liste os Cdigos do Cada Funcionrio, seus Nomes, seus Cargos e o nome do Gerente ao qual este se relaciona. Soluo: Precisamos criar um auto-relacionamento, ou seja, juntar uma tabela a ela prpria. possvel juntarmos uma tabela a ela mesma com a utilizao de apelidos, permitindo juntar tuplas da tabela a outra tuplas da mesma tabela. SELECT A.EMPNUME, A.EMPNOME, A.EMPSERV, B.EMPNOME FROM EMP A, EMP B WHERE A.EMPGERE = B.EMPNUME 16. As SubConsultas Uma subconsulta um comando "select" que aninhado dentro de outro "select" e que devolve resultados intermedirios. 17. Relacione todos os nomes de funcionrios e seus respectivos cargos, desde que o oramento do departamento seja igual a 300000. Soluo: SELECT EMPNOME, EMPSERV FROM EMP A WHERE 300000 IN (SELECT DEPORCA FROM DEPT WHERE DEPT.DEPNUME = A.DEPNUME) Nota - Observe que a clusula IN torna-se verdadeira quando o atributo indicado est presente no conjunto obtido atravs da subconsulta. 18. Relacione todos os departamentos remunerao maior que 3500. que possuem empregados com

Soluo: SELECT DEPNOME FROM DEPT A WHERE EXISTS (SELECT * FROM EMP WHERE EMPSALA > 3500 AND EMP.DEPNUME = A.DEPNUME') Nota - Observe que a clusula EXISTS indica se o resultado de uma pesquisa contm ou no tuplas. Observe tambm que poderemos verificar a no existncia (NOT EXISTS) caso esta alternativa seja mais conveniente. 19. Unies Podemos eventualmente unir duas linhas de consultas simplesmente utilizando a palavra reservada UNION. 20. Liste todos os empregados que tenham cdigos > 10 ou Funcionrios que trabalhem em departamentos com cdigo maior que 10. Soluo: Poderamos resolver esta pesquisa com um nico Select, mas para exemplificar utilizaremos o exemplo abaixo: (Select * From Emp Where EmpNume > 10) Union (Select * From Emp Where DepNume > 10) 9

21. Inseres, Alteraes e Excluses Uma linguagem direcionada a extrao de informaes de um conjunto de dados, em tese no deveria incorporar comandos de manipulao dos dados. Devemos observar contudo que a mera existncia de uma linguagem padronizada para acesso aos dados "convidava" os desenvolvedores a aderirem a uma linguagem "padro" de manipulao de tabelas. Naturalmente cada desenvolvedor coloca "um algo mais" em seu SQL (SQL PLUS, SQL *, ISQL, e toda sorte de nomenclaturas), por um lado desvirtuando os objetivos da linguagem (padronizao absoluta), mas em contrapartida otimiza os acessos ao seu banco de dados e por maior que sejam estas mudanas, jamais so to importantes que impeam que um programador versado em SQL tenha grandes dificuldades em se adaptar ao padro de determinada implementao. De fato as diferenas entre o SQL da Sybase, Oracle, Microsoft, so muito menores dos que as existentes entre o C, o BASIC e o Pascal, que so chamadas de linguagens "irms", pois todas originam-se conceitualmente no FORTRAN. Podemos observar que todas as trs linguagens mencionadas possuem estruturas de controle tipo "para" (for), "enquanto" (while) e repita (do..while, repeat..until). Todas trabalham com blocos de instruo, todas tem regras semelhantes para declarao de variveis e todas usam comandos de tomada deciso baseadas em instrues do tipo "se" ou "caso", porm apesar de tantas semelhanas (sic), praticamente impossvel que um programador excelente em uma linguagem consiga rapidamente ser excelente em outra linguagem do grupo. Poderamos arriscar a dizer que um excelente programador C que utilize a implementao da Symantech ter que passar por um breve perodo de adaptao para adaptar-se ao C da Microsoft. O que ocorreria ento se este programador tiver que adaptar-se ao Delphi (Pascal) da Borland? De forma alguma o mesmo ocorrer com o especialista em SQL ao ter que migrar do Banco de Dados X para o Banco de Dados Y. Naturalmente existir a necessidade de aprendizado, mas este programador poder ir adaptando-se aos poucos sem precisar ser treinado novamente, o que um aspecto extremamente vantajoso para as empresas. 22. Inserir (Insert) INSERT INTO <tabela> [<campos>] [VALUES <valores>] Exemplos: Possibilita a insero de registros de forma interativa: INSERT INTO DEPT Possibilita a insero de registros em tabelas sem digitao dos dados: INSERT INTO DEPT (DEPNUME,DEPNOME,DEPLOCA) VALUES (70,"PRODUCAO","RIO DE JANEIRO") 23. Atualizar (Update) UPDATE <tabela> SET <campo> = <expresso> [WHERE <condio>] Exemplos: UPDATE EMP SET EMPSALA = EMPSALA* 1.2 WHERE EMPSALA< 1000 24. Excluir (Delete)

DELETE FROM <tabela> [WHERE <condio>] Exemplos: DELETE FROM emp WHERE EMPSALA > 5000 10

25. Transaes Muitas vezes gostaramos que determinado processo, caso fosse abortado por qualquer motivo, pudesse ser inteiramente cancelado. Imaginemos por exemplo um usurio digitando um pedido. Imaginemos ainda que o sistema possa reservar cada item solicitado de maneira "on line", ou seja ao mesmo tempo em que estou digitando a quantidade o sistema j "empenhe" uma quantidade equivalente no estoque. Imaginemos ainda que o sistema deve cancelar todas as operaes se apenas um dos itens no puder ser atendido. Grande problema, caso no pudssemos anular todos os processos a partir de determinada condio. Vamos simular tal ocorrncia com nosso banco de dados EMP. Imaginemos que ao invs de digitarmos DELETE FROM emp WHERE salario > 5000; tivssemos digitado DELETE FROM emp WHERE salario > 500; Ao invs de eliminarmos 2 registros, praticamente teramos eliminado o banco de dados todo. Para evitarmos que um erro de digitao, ou um processo iniciado porm sem condio de ser completado integralmente comprometa todos nossos dados podemos criar uma transao que nos begin transaction delete from emp where salario > 500 if SQL_RECORDCOUNT > 20 THEN ROLLBACK TRASACTION else COMMIT endif end transaction 26. Vises Uma viso consiste basicamente de uma tabela derivada de outras tabelas. Considerando o exemplo TRABALHO, poderamos criar uma viso baseada na Tabela de Empregados (EMP) e na Tabela de Departamentos (DEPT) onde tivssemos somente os Nomes dos Funcionrios e os Departamenos nos quais estes trabalhassem. Teramos algo assemelhado ao abaixo representado CREATE VIEW EMP_DEP AS SELECT E.EMPNOME, D.DEPNOME FROM EMP E, DEPT D WHERE E.DEPNUME = D.DEPNUME Devemos observar que: 1- Uma viso definida sobre uma nica tabela somente ser atualizvel se os atributos da tal viso contiverem a chave primria de tal tabela. 2- Vises sobre vrias tabelas no so passveis de atualizaes. 3- Vises que se utilizam de funes de agrupamentos, tambm no podero ser atualizadas.

11

PARTE III - Relatrios Comando: REPORT DISTINCT / UNIQUE [ atributo(s) ] REPORTTOP PAGETOP TOP DETAIL NONE BOTTOM PAGEBOTTOM REPORTBOTTOM FROM [ tabela(s) ] [ WHERE clausula-where ] [ GROUP BY clausula-grupo ] [ ORDER BY clausula-order by ]; Como exemplo converteremos um simples Select em um Report, temos: SELECT EMPNOME FROM EMP WHERE DEPNUME = 1000 REPORT DETAIL EMPNOME WHERE DEPNUME = 1000 Podemos direcionar a sada de um relatrio tanto para um arquivo como para uma impressora. Para um arquivo: REPORT ON RELAT.DAT ... Para uma impressora: REPORT ON LP: ... Agora incrementando um Report temos: REPORT REPORTTOP COL 10, *** RELATORIO DE FUNCIONARIOS *** , TODAY %QDD/MM/YY, SKIP, COL 10, =================================, SKIP 2 DETAIL COL 10, NOME %C22, SALARIO %FS, ADMISSAO %QDD/MM/YY REPORTBOTTOM COL 10, ============================= ====, SKIP, COL 20, TOTAL:, TOTAL(SALARIO) FROM EMP ORDER BY NOME Onde: REPORTTOP - O que sera impresso no topo do relatrio. PAGETOP - Impresso em cada topo de pagina. TOP - Impresso em cada Topo do Sort-Grupo do relatrio. DETAIL - O que sera impresso em cada linha. NONE - Se no tiver resultado o select, no sera impresso o relatrio. BOTTOM - Impresso em cada Bottom do Sort-Grupo do relatrio PAGEBOTTOM - O que sera impresso no rodap de cada pagina. 12

REPORTBOTTOM - O que sera impresso no rodape do relatrio. Formatos: %C - caracter %D - data y - ano, n - mes numrico, a - mes alfanumrico, d - dia, j - dia e ano juliano Exemplo: %Ddd/mm/yy %I - inteiro %F - ponto flutuante %FSZ onde: S - separador de 3 dgitos e decimal point Z - zeros sero suprimidos %Q - data %J - Hora h - hora, m - minutos, s - segundos %T - hora E temos as funes: TOTAL, AVERAGE, MAXIMUM, MINIMUM.

13

Você também pode gostar