Fórum Root.cz
Hlavní témata => Server => Téma založeno: ZAJDAN 25. 04. 2019, 09:49:18
-
Ahoj,
snažím se provést SELECT a do WHERE dostat datediff
SELECT Commission FROM `prodlist` WHERE datediff(day, SELECT CONVERT(varchar, getdate(), 1), DeliveryDate) <= 4
ale nejsem si jist zda je možné jako jeden z parametrů v datediff dosadit SELECT
datediff(day, SELECT CONVERT(varchar, getdate(), 1), DeliveryDate)
potřebuji v datediff předat aktuální datum ve formátu 01/12/2019
-
použil jsem omylem věci z SQL takže opravuji do mySQL
SELECT Commission FROM `prodlist` WHERE datediff(CURDATE(), "%d/%m/%Y"), DeliveryDate) <= 4
ale i tak to nedělám správně
-
SELECT Commission FROM `prodlist` WHERE datediff(DATE_FORMAT(CURDATE(), "%d/%m/%Y"), DeliveryDate) <= 4
tento zápis již nevyhodí žádnou chybu, ale nevrátí žádný vásledek i když by měl
-
tak se povedlo:
SELECT Commission FROM `prodlist` WHERE DATEDIFF(CURDATE(),STR_TO_DATE(DeliveryDate, '%m/%d/%Y')) <= 4
-
tak jsem se unáhlil
SELECT Commission FROM `prodlist` WHERE DATEDIFF(CURDATE(),STR_TO_DATE(DeliveryDate, '%d-%m-%Y')) < 2tento zápis by měl být správně, ale vrací mi i záznam kde je rozdíl 4 dny
-
První věc problém je, že máte datum v databázi uložený jako text místo aby tam byl uložený jako datum. Pokud to můžete opravit, opravte to.
Každopádně musíte zjistit, v jakém formátu v databázi ten datum máte. Napsal jste několik příkazů, v některých máte datum v americkém formátu, v dalším máte pořadí den, měsíc, rok oddělené spojovníky.
-
První věc problém je, že máte datum v databázi uložený jako text místo aby tam byl uložený jako datum. Pokud to můžete opravit, opravte to.
Každopádně musíte zjistit, v jakém formátu v databázi ten datum máte. Napsal jste několik příkazů, v některých máte datum v americkém formátu, v dalším máte pořadí den, měsíc, rok oddělené spojovníky.
zrovna měním typ sloupce v mySQL na DATE
jen škoda, že to má pevně daný formát :(
-
sloupec 'Delivery' jsem nastavil na typ DATE ...v mySQL (YYYY-mm-dd)
SELECT CURDATE();
vrátí 2019-04-25
formátování data v SQL je tedy dobře
přeformátoval jsem i původní záznamy ve sloupci 'DeliveryDate' do nového formátu a zkouším znova:
SELECT Commission FROM `prodlist` WHERE DATEDIFF(CURDATE(),DeliveryDate) < 4;
ale vrací mi to i záznamy, kde je rozdíl větší než 4, spíše mi připadá že to vrací všechny záznamy, jako by se WHERE vůbec neaplikovalo
-
tvl jak nekoho muze napadnout ukladat datum v SQL jako text, to fakt asi nikdy nepochopim takovehle demence, ten dotycny by zaslouzil povesit za koule do pruvanu
-
tvl jak nekoho muze napadnout ukladat datum v SQL jako text, to fakt asi nikdy nepochopim takovehle demence, ten dotycny by zaslouzil povesit za koule do pruvanu
poslóchej konópku..to je moje databáze! a ještě k tomu experimentální
pokud nemáš zájem poradit vyfič!
-
zkousels
SELECT Commission FROM `prodlist` JOIN (SELECT CONVERT(varchar, getdate(), 1) from dual) as Prase on 1=1 WHERE datediff(day, Prase, DeliveryDate) <= 4
-
zkousels
SELECT Commission FROM `prodlist` JOIN (SELECT CONVERT(varchar, getdate(), 1) from dual) as Prase on 1=1 WHERE datediff(day, Prase, DeliveryDate) <= 4
moc díky, že jsi se rozhodl poradit....tento zápis se ale mySQL nebude líbit, protože jak už teď vidím
datediff(day, Prase, DeliveryDate)
v manualu mySQL jsem se dočetl, že se předávají pouze dva parametry
DATEDIFF(expr1,expr2)
-
jen škoda, že to má pevně daný formát :(
To není přesné. Databáze ukládá datum v nějakém interním formátu, který vás nemusí zajímat. Při vstupu a výstupu pak převádí mezi uživatelským formátem a tímto interním. Normálně by vás ale neměl zajímat ani ten standardní výstupní formát, protože obvykle nepracujete přímo s databází – k databázi přistupujete pomocí nějaké aplikace, ve které je ten databázový datum překlopený do datového typu daného programovacího jazyka. A teprve při prezentaci dat uživateli datum převedete do formátu vhodného pro uživatele (což může záviset i na tom, co si uživatel zvolí).
ale vrací mi to i záznamy, kde je rozdíl větší než 4, spíše mi připadá že to vrací všechny záznamy, jako by se WHERE vůbec neaplikovalo
Pokud je ten dotaz zapsaný takhle, WHERE se samozřejmě aplikuje. Máte ve správném pořadí parametry té funkce, tj. nevracím vám vždy záporná čísla? Nejjednodušší je přidat si DeliveryDate a tu funkci do SELECTu, myslím, že pak uvidíte na první pohled, v čem je problém.
-
Pokud je ten dotaz zapsaný takhle, WHERE se samozřejmě aplikuje. Máte ve správném pořadí parametry té funkce, tj. nevracím vám vždy záporná čísla? Nejjednodušší je přidat si DeliveryDate a tu funkci do SELECTu, myslím, že pak uvidíte na první pohled, v čem je problém.
zkusil jsem tedy:
SELECT Commission, DeliveryDate, DATEDIFF(CURDATE(),DeliveryDate) FROM `prodlist`a do nově vytvořeného sloupce se dostali záporná čísla, přesně jak píšete :_)
přehodil jsem tedy parametry ve funkci DIFFDATE a už to valí jak má
moc díky!