Datas inferior e superior
09/09/2016
0
Por exemplo,
hoje é dia 09/09
Preciso dos aniversariantes de 06,07,08,09,10,11,12,13/10.
Laura
Post mais votado
12/09/2016
declare @mes as Int
declare @dia as Int
set @mes = month(getdate())
set @dia = day(getdate())
select nome, dta_nasc from tabela WHERE
month(dta_nasc) = @mes
AND day(dta_nasc) between @dia-3 and @dia+4
Priscila Silva
Mais Posts
09/09/2016
Jothaz
DECLARE @TAB AS TABLE (DT DATE) --ESTO USANDO A DATA ATUAL -> 2016-09-09 --MAS SERÁ USADA A DATA DO SISTEMA DO DIA QUE VOCÊ RODAR INSERT INTO @TAB (DT) VALUES ((GETDATE() - 10)) INSERT INTO @TAB (DT) VALUES (GETDATE()) INSERT INTO @TAB (DT) VALUES ((GETDATE() - 5)) INSERT INTO @TAB (DT) VALUES ((GETDATE() - 1)) INSERT INTO @TAB (DT) VALUES ((GETDATE() - 2)) INSERT INTO @TAB (DT) VALUES ((GETDATE() + 5)) INSERT INTO @TAB (DT) VALUES ((GETDATE() + 7)) INSERT INTO @TAB (DT) VALUES ((GETDATE() + 4)) INSERT INTO @TAB (DT) VALUES ((GETDATE() + 3)) INSERT INTO @TAB (DT) VALUES ((GETDATE() + 2)) SELECT * FROM @TAB SELECT * FROM @TAB WHERE DT BETWEEN (GETDATE() - 3) AND GETDATE() OR DT BETWEEN GETDATE() AND (GETDATE() + 4) ORDER BY DT
10/09/2016
Marcelo Santana
Abraço, Marcelo Queiroz..
// CREAÇÃO DA TABELA; CREATE TABLE ANIVERSARIO ( COD_NIVER INT PRIMARY KEY NOT NULL, NOME VARCHAR(80) NOT NULL, NASCIMENTO date NOT NULL ) GO //EFETUANDO INSERT INSERT INTO ANIVERSARIO (COD_NIVER, NOME, NASCIMENTO) VALUES(1, 'Marcelo', (GETDATE() + 1)),(2, 'Alex', (GETDATE() + 2)),(3, 'João',(GETDATE() + 3)),(4, 'Amanda', (GETDATE() + 4)),(5, 'Bruno', (GETDATE() + 5)),(6, 'Marcela', (GETDATE() + 6)),(7, 'Iolanda', (GETDATE() - 1)),(8, 'Candido', (GETDATE() - 2)),(9, 'Josy', (GETDATE() - 3)),(10, 'Elma', (GETDATE() - 4)),(11, 'Edna', (GETDATE() - 5)),(12, 'Wellington', (GETDATE() - 6)); // SELECIONANDO DATAS NO PERÍODO ESTIPULADO ATRAVÉS DO BETWEEN SELECT * FROM ANIVERSARIO WHERE NASCIMENTO BETWEEN((GETDATE() -3) AND (GETDATE() + 4)) ORDER BY NASCIMENTO;
12/09/2016
Laura
Do jeito que vocês fizeram, pegararia os aniversariantes do dia, mes e ano atual.
Eu fiz assim:
declare @mes date = month(getdate()) begin select nome, dta_nasc from tabela WHERE dta_nasc BETWEEN dateadd(day,-3,getdate() + @mes) AND dateadd(day,+4,GETDATE() + @mes)
Mas me retorna, o seguinte erro
Mensagem 206, Nível 16, Estado 2, Linha 1
Operand type clash: int is incompatible with date
Mensagem 402, Nível 16, Estado 1, Linha 3
The data types datetime and date are incompatible in the add operator
Obrigada pela atenção
12/09/2016
Fabiano Carvalho
Basicamente é isso
SELECT * FROM [SUA_TABELA] WHERE DATA BETWEEN DATEADD(DAY,-3,GETDATE()) AND DATEADD(DAY,4,GETDATE())
12/09/2016
Priscila Silva
declare @mes as Int
declare @dia as Int
set @mes = month(getdate())
set @dia = day(getdate())
select nome, dta_nasc from tabela WHERE
month(dta_nasc) = @mes
AND day(dta_nasc) between @dia-3 and @dia+4
12/09/2016
Laura
declare @mes as Int
declare @dia as Int
set @mes = month(getdate())
set @dia = day(getdate())
select nome, dta_nasc from tabela WHERE
month(dta_nasc) = @mes
AND day(dta_nasc) between @dia-3 and @dia+4
Este script deu certo, MUITO OBRIGADA.
Vou abusar um pouquinho, em caso de não haver nenhum aniversariante no mês, como faço para printar uma msg na tela, do tipo ''''NÃO HÁ ANIVERSARIANTES''''
12/09/2016
Priscila Silva
Vê se o "print" atende a sua necessidade:
declare @mes as Int
declare @dia as Int
set @mes = month(getdate())
set @dia = day(getdate())
IF EXISTS ( select nome, dta_nasc from tabela WHERE month(dta_nasc) = @mes AND day(dta_nasc) between @dia-3 and @dia+4 )
select nome, dta_nasc from tabela WHERE month(dta_nasc) = @mes AND day(dta_nasc) between @dia-3 and @dia+4
ELSE
PRINT'-Não há aniversáriantes'
12/09/2016
Laura
declare @mes as Int declare @dia as Int set @mes = month(getdate()) set @dia = day(getdate()) IF EXISTS ( select nome, dta_nasc from [tb_FUNCIONARIOS] WHERE flag = 'A' AND month(dta_nasc) = @mes AND day(dta_nasc) between @dia-3 and @dia+4 ) ELSE PRINT 'Não há aniversariante'
Mais uma vez, MUITO OBRIGADA.
14/09/2016
Laura
Tiver que alterar o código, porque casjo não haja aniversariante, o retorno da query não pode ser apenas ''Não há aniversariantes'', tem de aparecer pelo menos 8 aniversariantes, mesmo que sejam inferior ao dia e mes atual.
Fiz a seguinte query, mas não estou conseguindo ordenar por mes.
with data as( select replicate(''0'', 2 - len(day(DTA_NASC))) + convert(varchar, day(DTA_NASC)) +''-'' + replicate(''0'', 2 - len(month(getdate()))) + convert(varchar, month(DTA_NASC)) Dia, Nome, case when day(DTA_NASC) = day(dateadd(day, -3, getdate())) and day(DTA_NASC) = day(dateadd(day,+ 4, getdate())) then 0 end Coluna from tabela where day(Dta_Nasc) >= 1 and day(Dta_Nasc) < = 31 and month(Dta_Nasc) >= month(getdate()) ) select * from data union all select top 1 replicate(''0'', 2 - len(day(getdate()))) + convert(varchar, day(getdate())) +''-'' + (replicate(''0'', 2 - len(month(getdate())))) + convert(varchar, month(getdate())), case when dia <> (replicate('''', 2 - len(day(getdate()))) + convert(varchar, day(getdate())) +''-'' + convert(varchar, month(getdate()))) then ''Não há aniversariante'' else Nome end , '' '' from data
14/09/2016
Luiz Santos
CREATE TABLE #ANIVERSARIO( NOME VARCHAR(100), DATA DATE ); INSERT INTO #ANIVERSARIO VALUES('LUIZ','1978-08-28') INSERT INTO #ANIVERSARIO VALUES('FERNANDO','1978-09-15') IF EXISTS(SELECT * FROM #ANIVERSARIO WHERE CONVERT(DATE, CONVERT(VARCHAR(8), YEAR(GETDATE())*10000+MONTH(DATA)*100+DAY(DATA)),112) BETWEEN GETDATE()-3 AND GETDATE() + 4) BEGIN SELECT * FROM #ANIVERSARIO WHERE CONVERT(DATE, CONVERT(VARCHAR(8), YEAR(GETDATE())*10000+MONTH(DATA)*100+DAY(DATA)),112) BETWEEN GETDATE()-3 AND GETDATE() + 4 END ELSE BEGIN SELECT TOP 8 * FROM #ANIVERSARIO ORDER BY 2 DESC END
14/09/2016
Luiz Santos
Ficou faltando no ultimo SQL o Where
SELECT TOP 8 * FROM #ANIVERSARIO WHERE CONVERT(DATE, CONVERT(VARCHAR(8), YEAR(GETDATE())*10000+MONTH(DATA)*100+DAY(DATA)),112) < GETDATE() ORDER BY 2 DESC
14/09/2016
Luiz Santos
15/09/2016
Laura
rodei seu script e só me retornou um dado, que é um aniversariante da data de ontem.
Preciso que mostre pelo menos 8 aniversariantes, mesmo que sejam de datas futuras, e não havendo na data atual, retornar a mensagem.
15/09/2016
Luiz Santos
Tinha entendido que eram os 8 últimos não os próximos 8.
Nesse caso, mude o sinal do segundo select de menor(<) para maior (>) e o Order By para ASC em vez de DESC.
Assim ele vai trazer os próximos 8, desde que não haja nenhum aniversariante no período de 7 dias.
Grande abraço
Clique aqui para fazer login e interagir na Comunidade :)