LISTAR TODAS AS DATAS DE UM PERÍODO

POCE1DON 24/01/2017 15:48:41
#470978
Por favor, será que pode me ajudar?

Tenho a data inicial, que pode ser a de hoje, e a final em uma tabela.

Quero fazer o select me mostrar todas as datas nesse período, já que preciso verificar se houve
algum feriado nacional ou municipal.

Tem alguma ideia?

Vlw
LVFIOROT 24/01/2017 17:40:46
#470982
para isso voce precisa de 3 datas

Uma inicial: (que pode ser hoje)
Uma final: (?????)
e a do seu banco de dados

Seria essa sql, se entendi bem.

Select * From TB Where TB.data between [Ô]Inicio[Ô] and [Ô]Fim[Ô]
JABA 24/01/2017 18:04:54
#470983
Se sua intenção é apenas gerar as datas a partir de duas, então você pode fazer isso diretamente no código mesmo. Basta apenas você capturar a data desejada no banco e fazer o seguinte:

dim data1 as Date = [Ô]01/10/2016[Ô] [ô]Aqui entra a Data que vem do banco de dados
dim data2 as Date = Date.Now
dim t as timespan = data2-data1

for i as integer = 1 to t.Days
Console.WriteLine(data1.AddDays(i).ToShortDateString())
next


Se for para trazer os registro do banco com essas datas, você pode usar o código do colega acima.

OBS: Linguagem VB.Net
POCE1DON 24/01/2017 18:41:30
#470984
Citação:

:
para isso voce precisa de 3 datas

Uma inicial: (que pode ser hoje)
Uma final: (?????)
e a do seu banco de dados

Seria essa sql, se entendi bem.

Select * From TB Where TB.data between [Ô]Inicio[Ô] and [Ô]Fim[Ô]



Desse jeito está apenas aplicando um filtro para que sejam apresentados os registros [Ô]entre[Ô] as datas de inicio e fim, mas não
é apresentado as datas, desde a de início e fim...

Como exemplo, digamos que minha data de inicio seria 01/01/2017 e a final 10/01/2017,
então preciso que meu [Ô]select[Ô] mostre

01/01/2017
02/01/2017
03/01/2017
04/01/2017
05/01/2017
06/01/2017
07/01/2017
08/01/2017
09/01/2017
10/01/2017

Citação:

:
Se sua intenção é apenas gerar as datas a partir de duas, então você pode fazer isso diretamente no código mesmo. Basta apenas você capturar a data desejada no banco e fazer o seguinte:

dim data1 as Date = [Ô]01/10/2016[Ô] [ô]Aqui entra a Data que vem do banco de dados
dim data2 as Date = Date.Now
dim t as timespan = data2-data1

for i as integer = 1 to t.Days
Console.WriteLine(data1.AddDays(i).ToShortDateString())
next


Se for para trazer os registro do banco com essas datas, você pode usar o código do colega acima.

OBS: Linguagem VB.Net



Amigo, vc não entendeu

Eu preciso fazer um [Ô]select[Ô], exibir todas as datas entre 2, desde a de início até à de fim.

Apenas completando, meu BD é access

Em SQL Server, é possível gerar uma função que faça isso, mas em Access, não dá pra criar funções, então
tem que ser via JOINS ou coisas do tipo.
JABA 24/01/2017 20:14:25
#470985
Se sua intenção é trazer todas as datas, então o que o colega postou resolve o seu problema. Para que isso funcione da maneira que você quer, essas datas precisam existir no banco, daí é só mostrar:

Select [txt-color=#e80000]CampoDataDesejado [/txt-color]From TB Where TB.data between [Ô]DataInicio[Ô] and [Ô]DataFim[Ô]


ou

Select [txt-color=#e80000]CampoDataDesejado  [/txt-color]From TB Where DataInicio >= #datainicio# And DataFim <= #datafim# 


Se para isso você precisa fazer junção de tabela e não está conseguindo, então coloque toda a sua estrutura aí que montamos a consulta pra você.
PLUGSOFTSM 24/01/2017 20:16:05
#470986
Faz assim
Select Distinct Data from [Tabela} where Data Between # [Data Inicial]# and #[data Final]# order by data

Cuidados:
1 - Talvez vc tenha que formatar [Data Inicial] e [Data Final] para o formato [ô]yyyy/mm/dd[ô] - Daí ficaria assim Format([Data Inicial] ,[Ô]yyyy/mm/dd[Ô])
2 - Se não pegar a Data inicial e final mude Data Between # [Data Inicial]# and #[data Final]# para Data >= # [Data Inicial]# and Data <= #[data Final]#
3 - Se vc grava a hora junto com a data, cuidado com a data final;
4 - Analise a possibilidade de migrar teu banco de dados access para um outro mais robusto.... Eu uso aqui na minha empresa o SqlServer e o PostGress - Recomendo qualquer um dos dois
POCE1DON 24/01/2017 21:29:44
#470987
Pessoal, vocês estão entendendo errado o que preciso.

Novamente, o que estão dizendo, vai trazer as datas que estão cadastradas no BD, mas não é isso que preciso.

Veja o exemplo:

Tenho cadastrado as datas 15/03/2016, 08/04/2016, 19/04/2016, cada linha no banco, exatamente nessa ordem (período)

Quando eu fizer o [Ô]select[Ô] apenas no campo [Ô]data_cadastro[Ô], valor [Ô]15/03/2016[Ô], com referencia na data de hoje,
eu preciso que seja apresentado as [Ô]datas[Ô] e não os [Ô]registros gravados[Ô] no BD. A data de hoje e a que
está cadastrada, são só as referencias pra aplicar o filtro, mas os valores, são a indicação de início e fim das datas
que precisam ser [Ô]geradas[Ô]

Eu preciso obter os valores assim:

15/03/2016 data cadastrada no BD
16/03/2016 à partir dessa, é gerada pelo [Ô]select[Ô], e tenho que visualizar (obter) esse valor
17/03/2016
18/03/2016
19/03/2016
20/03/2016
21/03/2016
22/03/2016
23/03/2016
25/03/2016
26/03/2016
27/03/2016
28/03/2016
.... até hoje
24/01/2017

nesse exemplo, seriam geradas 313 datas, e mais 2 que são as de referencia, 15/03/2016 e a de hoje, 24/01/2017

Compreendem?
LVFIOROT 24/01/2017 21:48:29
#470988
bem, o banco de dados nao tem como inventar datas, se nao existe registro, nao tem como o banco de dados voltar esses registros.
Se voce precisa de algo assim, com access, acho que nao será possível, pois o mesmo nao tem store procedure para fazer um while, gerar uma Tabela temporaria, criar essas informações e voltar as mesmas para vc.

Agora uma pergunta, porque isso precisa voltar do access? pq nao pode ser via codigo?



JABA 24/01/2017 21:54:44
#470989
O código que eu passei faz exatamente isso. Por que teria que ser via banco?
POCE1DON 24/01/2017 22:02:46
#470992
Fazer uma [Ô]tabela temporária[Ô], é possível quando a gente faz um JOIN em um SELECT, se parar pra analisar,
é basicamente uma tabela temporária o SELECT que você acessou.

Eu precisava disso para verificar a contagem de dias entre 2 datas, mas nesses dias contados, deveria
ser dispensado os finais de semanas e feriados nacionais/locais.

Vou pensar em outra solução, Access ficou muito limitado para isso.

Obrigado pela força aí pessoal
JABA 25/01/2017 00:55:10
#470999
Com esse código, você pega todas as datas a partir de duas datas, retirando os finais de semana:

 dim datas as new ArrayList
dim data1 as Date = [Ô]01/10/2016[Ô]
dim data2 as Date = Date.Now
dim t as timespan = data2-data1

For i as integer = 1 to t.Days

if data1.DayOfWeek <> 5 OrElse data1.DayOfWeek <> 6 then
datas.Add(data1)
end if

data1 = data1.addDays(i).ToShortDateString()
next

For i as integer = 0 to datas.Count-1
Console.WriteLine(datas(i))
Next
Página 1 de 2 [12 registro(s)]
Faça seu login para responder