Hledáme nového kolegu do redakce - 100% home office, 100% flexibilní pracovní doba. Více informací.
Avatar
michal Čepelák:4. března 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. března 6:33
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:4. března 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. března 9:09
 
Nahoru Odpovědět
4. března 9:08
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Mouser
Člen
Avatar
Odpovídá na michal Čepelák
Mouser:4. března 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. března 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.