PL/SQL – Como fazer select para buscar dados por horário no Oracle

Olá, neste exemplo de hoje, vou mostrar como fazer uma consulta SQL em um campo do tipo (DATE) para filtrar os dados por horário.

Criando a tabela (BLOG_TEMP_DATAS) para o exercicio.

create table BLOG_TEMP_DATAS
(
NR_SEQUENCIA NUMBER,
DT_CONSULTA DATE
)

Consultando os dados na tabela

Utilizando o comando to_char(dt_consulta, ‘hh24’), podemos utilizar a condição para filtrar apenas pelo horário. Veja abaixo o exemplo.

select
*
from
blog_temp_datas
where to_char(dt_consulta, ‘hh24′) between ’12’ and ’16’

 select 
   nr_sequencia
  ,to_char(dt_consulta, 'hh24')
  ,dt_consulta
 from 
 blog_temp_datas
 where to_char(dt_consulta, 'hh24') between '12' and '16'

Oracle PL/SQL MAX Function

Exemplo prático;

Criando a tabela de funcionário.

<pre lang="sql" escaped="true">
create table FUNCIONARIO

(
NM_FUNCIONARIO VARCHAR2(150),
NR_CHAPA       NUMBER,
DT_CONTRATACAO DATE
)

</pre>

 

oracle_max_tb_funcionario

Exemplo de uso da função max para obter o maior número de chapa.

max

Tabela onde está os valores  salários e competências

<pre lang=’sql’ line=’1′>

create table BENTO.FUNC_SALARIO
(
DT_COMPETENCIA     DATE,
DT_INICIO_VIGENCIA DATE,
DT_FIM_VIGENCIA    DATE,
NR_CHAPA           NUMBER,
VL_SALARIO         NUMBER(15,2)
)

</pre>

 

max_salario

Imaginando uma situação onde é necessário demonstrar o salário em vigência atual.

<pre lang=’sql’ line=’1′>

select
a.NM_FUNCIONARIO
, a.nr_chapa
, b.VL_SALARIO
from
bento.funcionario a
, bento.func_salario b
where a.nr_chapa = b.NR_CHAPA
and b.dt_competencia = ( select max(c.DT_COMPETENCIA)
from bento.func_salario c
where c.NR_CHAPA  = b.nr_chapa
)

</pre>

 

max-maior-salario Situação onde é necessário demonstrar o valor de salário atual e o salário anterior.

valor-salario-anteior