Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: MSSQL řazení podle datumu

Aktivity
Avatar
michal Čepelák:4.3.2021 6:33

Zdravím,
nejde mi správně vyfiltrovat data.

Zkusil jsem: Mám kód :

select datumfr, datumto FROM Datum where GetDate() < DateAdd(d,-30,DateTo)

akorát toto mi vypíše všechny data, která jsou větší jak aktuální datum.

Chci docílit: Potřeboval bych vypsat hodnoty z tabulky, které jsou větší jak aktuální datum ale nejsou víc jak 30 dní dopředu od aktuálního datumu.

Děkuji za rady

 
Odpovědět
4.3.2021 6:33
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4.3.2021 9:08

1. google?
google = mssql get by date sub 30 days

DATEADD(day,-30,date)

google = DATEADD mssql examples

DATEADD (datepart , number , date )
DATEADD(millisecond,1,@datetime2)
WHERE StartDate BETWEEN @StartDate AND DATEADD(DAY, @Units, @StartDate)
WHERE dtDateLogged > dateadd(dd,-30,CAST(GETDATE() AS DATE))
WHERE ss.DATE > DATEADD("day",-30, ss.date)

2. kdyz pracujes s cisly a sloupci, vzdycky je lepsi mit na jedne strane znamenka konstantu a na druhe sloupec
123 < sloupec
123 < sloupec - 456 -- tohle je spatne, protoze musi kazdy sloupec prepocitavat
date() < sloupec - 30 dni
date() - 30 dni < sloupec -- tohle je o moc rychlejsi, protoze si vlevo spocita konstantu

3. kdyz pracujes s tadumem, tak by sloupec mel mit typ DATETIME. Mas?

4. A tohle je cele spatne, divne. Zkus poslat nejaky funkcnejsi sql prikaz, treba jen cislo < datum. Fakt ti to nepise chyby v sql prikazu a projde ti to? Co se mi na tom nezda?

select datumfr, datumto FROM Datum where GetDate() < DateAdd(d,-30,DateTo)
-- * Jestlize mas v databazi sloupce datumfr, datumto, pak lze predpokladat,
-- ze tam jine nemas. Nebo tam mas take dalsi sloupec, DateTo?
-- * d = day, -30 je -30 dni, to je ok, ale pouzival bych text day a ne d. Pro lepsi orientaci

5. "jsou větší jak aktuální datum ale nejsou víc jak 30 dní dopředu od aktuálního datumu."
Chces zobrazit chystane udalosti od ted, max 30 dni dopredu? To mi nedava moc smysl. Kazdopadne tam musis mit dve podminky.

aktualni_datum < datum_sloupec < aktualni_datum + 30
aktualni_datum < datum_sloupec && datum_sloupec < aktualni_datum + 30

Cili, ja si myslim, ze by ten prikaz mel vypadat asi nejak takto:

SELECT
    DateFrom,
    DateTo
FROM
    Datum
WHERE
    GetDate() < DateTo AND DateTo < DateAdd(day, 30, DateTo)
--    GetDate() < DateTo AND DateTo < DateAdd("day", 30, DateTo) nebo takto
--  (s MS sql nepracuji, tak se v zapise neorientuji, takze to ber spis jako takove orientacni reseni)
Editováno 4.3.2021 9:09
 
Nahoru Odpovědět
4.3.2021 9:08
Avatar
Jakub Švasta
Lektor
Avatar
Odpovídá na michal Čepelák
Jakub Švasta:4.3.2021 12:51

Změn podmínku na:

SELECT datumfr, datumto FROM Datum WHERE datumto > GetDate() AND datumto <= DateAdd(d,30,GetDate())

Těch 30 dní musíš přičítat k aktuálnímu datu (takže getdate uvnitř dateadd), a to pak porovnávat s hodnotami v tabulce. A datum větší než dnes zapíšeš další podmínkou, a obě podmínky spojíš pomocí AND.

 
Nahoru Odpovědět
4.3.2021 12:51
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.