Krzysztof N.

Krzysztof N. Kierownik Działu
Produkcji /
Prokurent

Temat: Lista dni z określonego zakresu

Witam,
Macie pomysł w jaki sposób otrzymać listę (tablę/wynik kwerendy) z listą kolejnych dni (dat: 01.02.2015, 02.02.2015....) z określonego np w formularzu zakresu.
Podaję zakres od do i potrzebuję listę wszystkich dni z tego zakresu.
Będę wdzięczny za pomysł.
Krzysiek

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: Lista dni z określonego zakresu


Sub wywolaj()
Call gen(#1/1/2015#, #1/5/2020#, "tabela1")
End Sub

Function gen(strDate As Date, stpDate As Date, trgTbl As String)
Dim curDate As Date

CurrentDb.Execute "DELETE FROM " & trgTbl
curDate = strDate

Do Until curDate > stpDate
CurrentDb.Execute "INSERT INTO " & trgTbl & " (Data) VALUES (#" & curDate & "#)"
curDate = DateAdd("d", 1, curDate)
Loop

End Function
Ten post został edytowany przez Autora dnia 17.08.15 o godzinie 19:06
Wojciech Muszyński

Wojciech Muszyński Tworzenie aplikacji
bazodanowych
(Oracle, APEX,
Access)

Temat: Lista dni z określonego zakresu

Wojciech G.:
Ma ktoś lepszy pomysł?


Znacznie prostsze rozwiązanie oparte o pomocniczą tabele tblNumer
zawierającą liczby od 1 do 100.


SELECT #2/21/2010#+(a.num-1)*100+(b.num-1) AS Wygenerowana_data
FROM tblNumer AS a,
tblNumer AS b
WHERE (a.num-1)*100+(b.num-1) <= #3/5/2010# - #2/21/2010#
ORDER BY (a.num-1)*100+(b.num-1)


#2/21/2010# - mniejsza z dat
#3/5/2010# - większa z dat

#3/5/2010# - #2/21/2010# - liczba dni pomiędzy datami

(a.num-1)*100+(b.num-1) - generuje numery od 0 do 9999 na podstawie złączenia kartezjańskiego tabeli tblNumer as a i tblNumer as b (10 tys rekordów)

Pozwala wygenerować do 10 tysięcy dat dziennych (ponad 25 lat)pomiędzy dwoma wartościami.
Jeżeli spodziewany jest większy zakres to należy dodać 3 wywołanie tabeli tblNumery i liczyć:
(a.num-1)*10000+(b.num-1)*100+(c.num-1).

W Oracle i SQL Server można podarować sobie tabele pomocniczą i użyć wyrażenie CTE (recursive With) w celu dynamicznego wygenerowania numerów od 1 do 100 (albo lepiej od 0 do 99)Ten post został edytowany przez Autora dnia 17.08.15 o godzinie 21:12

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora
Wojciech Muszyński

Wojciech Muszyński Tworzenie aplikacji
bazodanowych
(Oracle, APEX,
Access)

Temat: Lista dni z określonego zakresu

Kwestia gustu.
Jeden lubi tak, drugi inaczej.

Nasze rozwiązania są niemal identyczne, tylko zapis:

FROM tblNumer AS a,
tblNumer AS b


jest wymienny z:


(SELECT 0 AS x FROM faktura UNION SELECT 1 AS x FROM faktura UNION SELECT 2 AS x FROM faktura UNION SELECT 3 AS x FROM faktura UNION SELECT 4 AS x FROM faktura UNION SELECT 5 AS x FROM faktura UNION SELECT 6 AS x FROM faktura UNION SELECT 7 AS x FROM faktura UNION SELECT 8 AS x FROM faktura UNION SELECT 9 AS x FROM faktura) tT,
(SELECT 0 AS x FROM faktura UNION SELECT 1 AS x FROM faktura UNION SELECT 2 AS x FROM faktura UNION SELECT 3 AS x FROM faktura UNION SELECT 4 AS x FROM faktura UNION SELECT 5 AS x FROM faktura UNION SELECT 6 AS x FROM faktura UNION SELECT 7 AS x FROM faktura UNION SELECT 8 AS x FROM faktura UNION SELECT 9 AS x FROM faktura) tS,
(SELECT 0 AS x FROM faktura UNION SELECT 1 AS x FROM faktura UNION SELECT 2 AS x FROM faktura UNION SELECT 3 AS x FROM faktura UNION SELECT 4 AS x FROM faktura UNION SELECT 5 AS x FROM faktura UNION SELECT 6 AS x FROM faktura UNION SELECT 7 AS x FROM faktura UNION SELECT 8 AS x FROM faktura UNION SELECT 9 AS x FROM faktura) tD,
(SELECT 0 AS x FROM faktura UNION SELECT 1 AS x FROM faktura UNION SELECT 2 AS x FROM faktura UNION SELECT 3 AS x FROM faktura UNION SELECT 4 AS x FROM faktura UNION SELECT 5 AS x FROM faktura UNION SELECT 6 AS x FROM faktura UNION SELECT 7 AS x FROM faktura UNION SELECT 8 AS x FROM faktura UNION SELECT 9 AS x FROM faktura) tJ


To ja jednak wolę utworzyć prostą tablice pomocniczą zawierającą 100 liczb niż wpisywać 40 razy:
select n as x from faktura
i 36 razy:
unionTen post został edytowany przez Autora dnia 18.08.15 o godzinie 07:14
Tomasz Gryzio

Tomasz Gryzio Dyrektor
zarządzający/Trener/
Konsultant - It
School

Temat: Lista dni z określonego zakresu

Witam,

Proponuję użyć:

SELECT
Format(#1/1/2015#+
(tblZeroDziewiec.Calkowita)+
(tblDziesiatki.Calkowita*10)+
(tblSetki.Calkowita*100)+
(tblTysiace.Calkowita*1000),'yyyy-mm-dd hh:nn:ss') AS Data
FROM
(SELECT distinct abs(id Mod 10) AS Calkowita FROM msysobjects) AS tblZeroDziewiec,
(SELECT distinct abs(id Mod 10) AS Calkowita FROM msysobjects) AS tblDziesiatki,
(SELECT distinct abs(id Mod 10) AS Calkowita FROM msysobjects) AS tblSetki,
(SELECT distinct abs(id Mod 10) AS Calkowita FROM msysobjects) AS tblTysiace
Where
((tblZeroDziewiec.Calkowita)+
(tblDziesiatki.Calkowita*10)+
(tblSetki.Calkowita*100)+
(tblTysiace.Calkowita*1000)) <= #1/1/2016#- #1/1/2015#


Pozdrawiam!

Wojciech Gardziński

Wypowiedzi autora zostały ukryte. Pokaż autora

Następna dyskusja:

zawezenie zakresu danych w ...




Wyślij zaproszenie do