MySQL: předání aktuálního data v datediff

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
MySQL: předání aktuálního data v datediff
« kdy: 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
« Poslední změna: 25. 04. 2019, 10:29:51 od Petr Krčmář »
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.


ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:mySQL - datediff
« Odpověď #1 kdy: 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ě
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:mySQL - datediff
« Odpověď #2 kdy: 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
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:MySQL: předání aktuálního data v datediff
« Odpověď #3 kdy: 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
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:MySQL: předání aktuálního data v datediff
« Odpověď #4 kdy: 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
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.


Re:MySQL: předání aktuálního data v datediff
« Odpověď #5 kdy: 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.

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:MySQL: předání aktuálního data v datediff
« Odpověď #6 kdy: 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 :(

Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:MySQL: předání aktuálního data v datediff
« Odpověď #7 kdy: 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
« Poslední změna: 25. 04. 2019, 12:53:42 od ZAJDAN »
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

Re:MySQL: předání aktuálního data v datediff
« Odpověď #8 kdy: 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

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:MySQL: předání aktuálního data v datediff
« Odpověď #9 kdy: 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č!
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

Re:MySQL: předání aktuálního data v datediff
« Odpověď #10 kdy: 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

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:MySQL: předání aktuálního data v datediff
« Odpověď #11 kdy: 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)
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.

Re:MySQL: předání aktuálního data v datediff
« Odpověď #12 kdy: 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.

ZAJDAN

  • *****
  • 2 078
    • Zobrazit profil
    • E-mail
Re:MySQL: předání aktuálního data v datediff
« Odpověď #13 kdy: 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!
Vesele, vesele do továrny dělník běží...vesele, vesele do továrny jde. Vesele se usmívá když mu soustruh zazpívá...vesele, vesele do továrny jde. Vesele si poskočí když se soustruh roztočí ...vesele, vesele do továrny jde.