Trabalhando com datas no oracle

Ĉ¿

Vou falar um pouco sobre algumas funções de data que podem ser utilizadas no Oracle.

O Oracle tem muitas funções para trabalhar com datas, porém, vou deixar aqui somente as que acho mais importantes, inclusive, as que usei durante minha vida de Desenvolvedor Oracle.
SYSDATE

É uma das funções mais utilizadas para desenvolvimento e administração do banco. Está função retorna a data e a hora atual do banco de dados. O Formato desta data depende da configuração do seu banco e também do software que você está utilizando.
Código:
1

SQL> SELECT SYSDATE FROM dual;
Resultado:
1
2
3

SYSDATE
---------------------
06/04/2009 10:00:54

ADD_MONTHS

Com essa função, é possível você trabalhar com datas somando meses ou subtraindo meses.
Código:
1

SQL> SELECT ADD_MONTHS(SYSDATE,1) FROM DUAL;
Resultado:
1
2
3

ADD_MONTHS(SYSDATE,1)
--------------------
06/05/2009 10:13:01

LAST_DAY

Essa função é utilizada para retornar o ultimo dia do mês que você passa como parâmetro. Muito útil para saber quantos dias tem um mês.
Código:
1

SQL> SELECT last_day(sysdate) FROM dual;
Resultado:
1
2
3

LAST_DAY(SYSDATE)
-----------------
30/04/2009 10:17:00

NEXT_DAY

Essa função é utilizada para saber o próximo dia da semana, tendo como base o parâmetro data e o dia da semana. Os dias da semana são de 1(domingo) até 7(sábado).
Código:
1

SQL> SELECT sysdate, next_day(SYSDATE,7) FROM dual;
Resultado:
1
2
3

SYSDATE NEXT_DAY(SYSDATE,7)
----------- -------------------
06/04/2009 11/04/2009

MONTHS_BETWEEN

Essa função é utilizada para saber o número de meses que existem entre duas datas. Observe que se você colocar a data atual e depois a data final, o resultado será negativo. Para este exemplo, utilizei o ADD_MONTHS para somar 5 meses ao mês atual, porém, você pode inserir qualquer parâmetro no formato de data.
Código:
1

SQL> SELECT MONTHS_BETWEEN(ADD_MONTHS(SYSDATE,5),SYSDATE) FROM DUAL;
Resultado:
1
2
3

MONTHS_BETWEEN(ADD_MONTHS(SYSDATE)
------------------------------
5

Não poderia deixar faltar o calculo entre dois campos datas… uma dor de cabeça para muitos desenvolvedores… o motivo? É que quando calculado (subtraido) dois campos de data e hora, o resultado é uma conversão. Exemplo abaixo teria um resultado exatamente assim… 3,12013888888889, porém, quando usado a soma ao campo hora com valor 00:00, o que não influencia em nada o resultado, o Oracle converte novamente o calculo para data hora, ficando mais fácil de entender. Existem outras formas de fazer a conversão, multiplicando pela quantidade de minutos ou quantidade de horas existentes em um dia… cada problema exige uma solução. Da forma apresentada aqui é uma das formas que atendem a maioria dos problemas e alem de fácil é elegante.
Código:
1
2
3
4
5

SQL> SELECT TAB.DT_ADMISSAO,TAB.HR_ADMISSAO,TAB.DT_DEMISSAO,TAB.HR_DEMISSAO,
(TO_DATE(TO_CHAR(TAB.DT_DEMISSAO,'DD/MM/YYYY')||' '||TO_CHAR(TAB.HR_DEMISSAO,'HH24:MI'),'DD/MM/YYYY HH24:MI') -
TO_DATE(TO_CHAR(TAB.DT_ADMISSAO,'DD/MM/YYYY')||' '||TO_CHAR(TAB.HR_ADMISSAO,'HH24:MI'),'DD/MM/YYYY HH24:MI')) +
TO_DATE('00:00','HH24:MI') CALCULO
FROM TAB_EXEMPLO;
Resultado:
1
2
3

DT_ADMISSAO HR_ADMISSAO DT_DEMISSAO HR_DEMISSAO CALCULO
----------- ------------ -------------- -------------- ------------------
03/04/2009 07:27 06/04/2009 10:20 04/04/2009 02:53:00

O valor exato do calculo deveria ser 03/04/2009 02:53, porém, como estou trabalhando com datas e o primeiro dia do mês é o número 1, logo, quando vou calcular, ele soma o 1 ao valor do calculo, 3, dando como resultado o 04. Nada que uma função não resolva…

O Oracle não permite somar dois campos data, ele apresenta o erro ora-00975: date + date not allowed.

A forma mais fácil de você somar dois campos datas, é você trabalhar com horas e/ou minutos.

Caso queira somar uma hora a uma data, basta você somar (1/24) (equivale a uma hora). Caso queira somar um minuto, você tem que somar (1/24/60) ou (1/1440).

Explicando melhor
(1/24/60) ou (1/1440)

Em vermelho corresponde a quantidade que deseja somar, neste caso, uma hora ou um minuto
Em verde claro corresponde a quantidade de horas em um dia e em azul, temos a quantidade de minutos existente em uma hora.

No segundo exemplo, em vermelho, tem o mesmo significado do primeiro exemplo e em laranja, temos a quantidade de minutos existente em 24 horas

Criando gráficos utilizando JPGraph com MySQL

Ĉ¿ Apresentarei nesta Dica como buscar os dados no MySQL e mostrar na forma de gráfico.

Nesta dica utilizarei uma tabela denominada vendas com as seguintes colunas (codigo, cidade e valor) já com alguns dados. Estou considerando que toda a estrutura (Apache,PHP,MySQL) já esteja instalada e rodando.

Para apresentar os dados, utilizaremos como exemplo o gráfico Bar Grad 1 localizado em //jpgraph-1.19/src/Examples/bargradex1.php .



1. Include das bibliotecas da classe JPGraph.

include ("jpgraph.php");
include ("jpgraph_bar.php");

2. Rotina para acesso e busca do dados no MySQL.

//rotina para conexão ao banco
$hostname_https = "localhost";
$database_https = "mysql";
$username_https = "web";
$password_https = "";

$con = mysql_connect($hostname_https, $username_https, $password_https)
or trigger_error(mysql_error(),E_USER_ERROR);

mysql_select_db("projeto",$con);

$query = "SELECT * FROM vendas";
$resultado = mysql_query($query,$con);

//Este tipo de gráfico utiliza o Eixo X e Y
$datay=array(); // array com os dado do Eixo Y
$datax=array(); // array com os dado do Eixo X

$i=0;
if (mysql_num_rows($resultado))
{
while ($campo = mysql_fetch_array($resultado))
{
//Retornando os dados e armazenado nos arrays.
$datay[$i] = $campo['valor']; //dados Eixo Y
$datax[$i] = $campo['cidade']; //dados Eixo X
$i++;
}
}
// fim do select nos dados.

3. Criando e manipulando os métodos do exemplo

O código abaixo está contido no exemplo //jpgraph-1.19/src/Examples/bargradex1.php .

// Configuração das dimensões do gráfico.
$graph = new Graph(400,200,"auto");
$graph->img->SetMargin(40,30,30,50);
$graph->SetScale("textlin");
$graph->SetMarginColor("lightblue");
$graph->SetShadow();

// Configuração do titulo do gráfico.
$graph->title->Set("Total de Vendas por Estado");
$graph->title->SetFont(FF_VERDANA,FS_NORMAL,12);
$graph->title->SetColor("darkred");

// Configuração de Font.
$graph->xaxis->SetFont(FF_VERDANA,FS_NORMAL,10);
$graph->yaxis->SetFont(FF_VERDANA,FS_NORMAL,10);
$graph->yscale->ticks->SupressZeroLabel(false);

// Dados do --> Eixo X
$graph->xaxis->SetTickLabels($datax);
$graph->xaxis->SetLabelAngle(50);

// Dados do --> Eixo Y
$bplot = new BarPlot($datay);
$bplot->SetWidth(0.6);

// Ajuste de cor
$bplot->SetFillGradient("navy","#EEEEEE",GRAD_LEFT_REFLECTION);
$bplot->SetColor("white");
$graph->Add($bplot);

// Cria o gráfico
$graph->Stroke();

?>
//fim *.php


4. Exemplo do gráfico.

Comandos git do dia a dia

Ĉ¿ #Criando um projeto do zero echo "# UBBOAT_App" >> README.md git init git add README.md git commit -m "first commi...