Oracle Sysdate como clausula Where

SQL

Oracle PL SQL

13/10/2021

Gostaria de usar a data do sysdate como clausula Where, pois tenho que fazer um relatorio que me traga os registros incluidos no anterior ao dia atual. Assim, posso considerar Sysdate-1?

SELECT

RHMEDI_ATESTADO.CODIGO_CONTRATO MATRIC,
RHPESS_CONTRATO.NOME NOME,
RHMEDI_ATESTADO.DATA_INICIO DT_INICIO,
RHMEDI_ATESTADO.DATA_FIM DT_FIM,
CASE
WHEN RHMEDI_ATESTADO.COD_TP_ATESTADO = '0005' THEN 'LIC MATERNIDADE'
WHEN RHMEDI_ATESTADO.COD_TP_ATESTADO = '0006' THEN 'DOACAO DE SANGUE'
WHEN RHMEDI_ATESTADO.COD_TP_ATESTADO = '0008' THEN 'ATESTADO ATE 15 DIAS'
WHEN RHMEDI_ATESTADO.COD_TP_ATESTADO = '0009' THEN 'AT ACID DO TRABALHO ATE 15 DIAS'
WHEN RHMEDI_ATESTADO.COD_TP_ATESTADO = '0011' THEN 'PRORR LIC MATERNIDADE'
WHEN RHMEDI_ATESTADO.COD_TP_ATESTADO = '0012' THEN 'PANDEMIA CORONAVIRUS'
WHEN RHMEDI_ATESTADO.COD_TP_ATESTADO = '0100' THEN 'LIC PATERNIDADE'
WHEN RHMEDI_ATESTADO.COD_TP_ATESTADO = '0108' THEN 'PRORR LIC PATERNIDADE'

END TIPO_ATESTADO,
RHMEDI_ATESTADO.DT_ULT_ALTER_USUA DT_REGISTRO

FROM
CRHH.RHMEDI_ATESTADO,
MGS.RHPESS_CONTRATO

WHERE
RHPESS_CONTRATO.CODIGO = RHMEDI_ATESTADO.CODIGO_CONTRATO
AND RHMEDI_ATESTADO.COD_TP_ATESTADO <> '0007'
AND RHMEDI_ATESTADO.DT_ULT_ALTER_USUA > TRUNC(SYSDATE)

ORDER BY RHMEDI_ATESTADO.DT_ULT_ALTER_USUA DESC


No caso, não estou conseguindo fazer funcionar com trunc(sysdate)-1.

Seria correto assim?
Marco Sousa

Marco Sousa

Curtidas 0

Melhor post

Emerson Nascimento

Emerson Nascimento

14/10/2021

tente assim:
SELECT
	AT.CODIGO_CONTRATO MATRIC,
	CT.NOME NOME,
	AT.DATA_INICIO DT_INICIO,
	AT.DATA_FIM DT_FIM,
	CASE
		WHEN AT.COD_TP_ATESTADO = '0005' THEN 'LIC MATERNIDADE'
		WHEN AT.COD_TP_ATESTADO = '0006' THEN 'DOACAO DE SANGUE'
		WHEN AT.COD_TP_ATESTADO = '0008' THEN 'ATESTADO ATE 15 DIAS'
		WHEN AT.COD_TP_ATESTADO = '0009' THEN 'AT ACID DO TRABALHO ATE 15 DIAS'
		WHEN AT.COD_TP_ATESTADO = '0011' THEN 'PRORR LIC MATERNIDADE'
		WHEN AT.COD_TP_ATESTADO = '0012' THEN 'PANDEMIA CORONAVIRUS'
		WHEN AT.COD_TP_ATESTADO = '0100' THEN 'LIC PATERNIDADE'
		WHEN AT.COD_TP_ATESTADO = '0108' THEN 'PRORR LIC PATERNIDADE'
	END TIPO_ATESTADO,
	AT.DT_ULT_ALTER_USUA DT_REGISTRO
FROM
	CRHH.RHMEDI_ATESTADO AT
INNER JOIN
	MGS.RHPESS_CONTRATO CT ON CT.CODIGO = AT.CODIGO_CONTRATO
WHERE
	AT.COD_TP_ATESTADO <> '0007'
	AND AT.DT_ULT_ALTER_USUA > TRUNC(SYSDATE-1)
ORDER BY
	AT.DT_ULT_ALTER_USUA DESC

pense na possibilidade de criar um cadastro para o tipo de atestado.
geralmente se usa o case para coisas simples, como SIM/NÃO, CANCELADO/ATIVO, onde o campo é apenas uma flag (0/1, T/F, S/N).
GOSTEI 1

Mais Respostas

Marco Sousa

Marco Sousa

13/10/2021

Boa noite Emerson, tudo bem?

Muito obrigado por responder
Acatei sua dica e alterei o CASE para Decode. Obrigado!

Infelizmente o
data_ult_alteracao > trunc(sysdate-1)
não funcionou adequadamente pois me retorna as informações de hoje
e usar o
data_ult_alteracao = trunc(sysdate-1)
o relatorio retorna vazio.





tente assim:
SELECT
	AT.CODIGO_CONTRATO MATRIC,
	CT.NOME NOME,
	AT.DATA_INICIO DT_INICIO,
	AT.DATA_FIM DT_FIM,
	CASE
		WHEN AT.COD_TP_ATESTADO = '0005' THEN 'LIC MATERNIDADE'
		WHEN AT.COD_TP_ATESTADO = '0006' THEN 'DOACAO DE SANGUE'
		WHEN AT.COD_TP_ATESTADO = '0008' THEN 'ATESTADO ATE 15 DIAS'
		WHEN AT.COD_TP_ATESTADO = '0009' THEN 'AT ACID DO TRABALHO ATE 15 DIAS'
		WHEN AT.COD_TP_ATESTADO = '0011' THEN 'PRORR LIC MATERNIDADE'
		WHEN AT.COD_TP_ATESTADO = '0012' THEN 'PANDEMIA CORONAVIRUS'
		WHEN AT.COD_TP_ATESTADO = '0100' THEN 'LIC PATERNIDADE'
		WHEN AT.COD_TP_ATESTADO = '0108' THEN 'PRORR LIC PATERNIDADE'
	END TIPO_ATESTADO,
	AT.DT_ULT_ALTER_USUA DT_REGISTRO
FROM
	CRHH.RHMEDI_ATESTADO AT
INNER JOIN
	MGS.RHPESS_CONTRATO CT ON CT.CODIGO = AT.CODIGO_CONTRATO
WHERE
	AT.COD_TP_ATESTADO <> '0007'
	AND AT.DT_ULT_ALTER_USUA > TRUNC(SYSDATE-1)
ORDER BY
	AT.DT_ULT_ALTER_USUA DESC

pense na possibilidade de criar um cadastro para o tipo de atestado.
geralmente se usa o case para coisas simples, como SIM/NÃO, CANCELADO/ATIVO, onde o campo é apenas uma flag (0/1, T/F, S/N).
GOSTEI 0
POSTAR