Fórum Root.cz

Hlavní témata => Server => Téma založeno: ZAJDAN 25. 04. 2019, 09:49:18

Název: MySQL: předání aktuálního data v datediff
Přispěvatel: ZAJDAN 25. 04. 2019, 09:49:18
Ahoj,
snažím se provést SELECT a do WHERE dostat datediff

Kód: [Vybrat]
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
Název: Re:mySQL - datediff
Přispěvatel: ZAJDAN 25. 04. 2019, 09:59:38
použil jsem omylem věci z SQL takže opravuji do mySQL

Kód: [Vybrat]
SELECT Commission FROM `prodlist` WHERE datediff(CURDATE(), "%d/%m/%Y"), DeliveryDate) <= 4
ale i tak to nedělám správně
Název: Re:mySQL - datediff
Přispěvatel: ZAJDAN 25. 04. 2019, 10:20:02
Kód: [Vybrat]
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
Název: Re:MySQL: předání aktuálního data v datediff
Přispěvatel: ZAJDAN 25. 04. 2019, 10:40:28
tak se povedlo:
Kód: [Vybrat]
SELECT Commission FROM `prodlist` WHERE DATEDIFF(CURDATE(),STR_TO_DATE(DeliveryDate, '%m/%d/%Y')) <= 4
Název: Re:MySQL: předání aktuálního data v datediff
Přispěvatel: ZAJDAN 25. 04. 2019, 11:18:33
tak jsem se unáhlil
Kód: [Vybrat]
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
Název: Re:MySQL: předání aktuálního data v datediff
Přispěvatel: Filip Jirsák 25. 04. 2019, 11:38:12
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.
Název: Re:MySQL: předání aktuálního data v datediff
Přispěvatel: ZAJDAN 25. 04. 2019, 12:25:35
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 :(

Název: Re:MySQL: předání aktuálního data v datediff
Přispěvatel: ZAJDAN 25. 04. 2019, 12:48:48
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:

Kód: [Vybrat]
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
Název: Re:MySQL: předání aktuálního data v datediff
Přispěvatel: Zabanovaný Anonymní Troll 25. 04. 2019, 12:54:23
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
Název: Re:MySQL: předání aktuálního data v datediff
Přispěvatel: ZAJDAN 25. 04. 2019, 12:57:32
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č!
Název: Re:MySQL: předání aktuálního data v datediff
Přispěvatel: Zabanovaný Anonymní Troll 25. 04. 2019, 13:04:40
zkousels

SELECT Commission FROM `prodlist` JOIN (SELECT CONVERT(varchar, getdate(), 1) from dual) as Prase on 1=1 WHERE datediff(day, Prase, DeliveryDate) <= 4
Název: Re:MySQL: předání aktuálního data v datediff
Přispěvatel: ZAJDAN 25. 04. 2019, 13:11:23
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)
Název: Re:MySQL: předání aktuálního data v datediff
Přispěvatel: Filip Jirsák 25. 04. 2019, 13:56:33
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.
Název: Re:MySQL: předání aktuálního data v datediff
Přispěvatel: ZAJDAN 25. 04. 2019, 14:07:58
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:
Kód: [Vybrat]
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!