Autor Zpráva
Nuimi
Profil
Dobrý den, mám v databázi uloženou hodnotu datum (DATE) formát je 1997-10-5 a já bych potřeboval porovnávat záznam 10-5 s datunem daného dne, a proto se chci zeptet jak dostanu ven z toho 1997-10-5 jen to 10-5
Taps
Profil
Nuimi:
Podivej se na month a day
Nuimi
Profil
nevím co tím myslíš
lionel messi
Profil
Nuimi:
nevím co tím myslíš

Prvý odkaz z vyhľadávania „month MySQL“ ma nasmeruje na dokumentáciu. Konkrétne ide o funkcie MONTH() a DAY().
Nuimi
Profil
Jo ale to month a day funguje jen na určitý čísla a já to potřebuju tahat z celého sloupce


Řekněme že mám dotaz $neco="SELECT neco FROM neco LIKE "???" Co mám napsat do like abych vybral z datumu jen tu část s měsícem a dnem??
anonymníí
Profil *
Nuimi:
Čeho chceš dosáhnout? Vypsat, kdo má daný den narozeniny? Nebo k čemu ti je jen den a měsíc?
Soudě dle formátu data, který jsi sem dal (1997-10-5) soudím, že datum není typu date, že? Začni tím, že budeš data ukládat jako data a pak s nimi jako s daty pracovat.


Napovím, že ať chceš udělat cokoliv, LIKE je téměř jistě špatně v tomto případě.
juriad
Profil
Nuimi:
Pokud chceš tuto operaci, tak se můžeš v MySQL s nějakou optimalizací dotazu rozloučit. Databáze vždy bude muset projít celou tabulku a porovnat každou hodnotu.

Možné dotazy jsou tři:
* máš den a měsíc zvlášť:
SELECT * FROM tabulka WHERE MONTH(datum) = 10 AND DAY(datum) = 5;
SELECT * FROM tabulka WHERE MONTH(datum) = 10 AND DAY(datum) = 5;
* máš to jen dohromady a líbí se ti předchozí nápad:
SELECT * FROM tabulka WHERE CONCAT(MONTH(datum), '-', DAY(datum)) = '10-5';
SELECT * FROM tabulka WHERE CONCAT(MONTH(datum), '-'DAY(datum)) = '10-5';
* máš to jen dohromady a chceš to udělat jinak:
SELECT * FROM tabulka WHERE DATE_FORMAT(datum, '%c-%e') = '10-5';
SELECT * FROM tabulka WHERE DATE_FORMAT(datum, '%c-%e') = '10-5';

Není příliš obvyklé, že v zápisu datumu nejsou jednotlivé položky zarovnané na dvě místa (10-5 oproti 10-05). To také může mít často důsledky na špatné pořadí záznamů a právě nemožnost použít operátor LIKE.

Co bude jak rychlé si budeš muset otestovat sám. Pokud by ti šlo o rychlost, byl by dobrý nápad přidat nový sloupec s předpočteným datumem ve formátu určeným pro porovnání (tedy 10-5, nebo ještě lépe zarovnaném na 10-05, jak je zvykem).
Nuimi
Profil
N řekněme že potřebuju porovnávat akruální den a měsíc se záznamem v databázi kde mám rok měsíc a den a já potřebuju porovnávat den se dnem a měsíc s měsícem


co kdybych místo datum chtěl záznamy z 1 sloupečku
(
$datum=Date("m-d");
$dochazka="SELECT datum FROM registrace WHERE CONCAT(MONTH(datum), '-',DAY(datum)) = '".$datum."'";
$datum=Date("m-d");
$dochazka="SELECT datum FROM registrace WHERE CONCAT(MONTH(datum), '-',DAY(datum)) = '".$datum."'";
)
přičemž datum by měl být jako název sloupce odkud tahám data
tiso
Profil
SELECT * FROM tabulka WHERE SUBSTRING(datum,6) = '10-5';
SELECT * FROM tabulka WHERE SUBSTRING(datum,6) = '10-5';
Ale odporúčam riadiť sa radou [#6]
juriad
Profil
Nuimi:
date('m-d') ti nikdy nevrátí '10-5', ale naopak '10-05'. Pak ale žádný z mých navrhů dotazů fungovat nebude. Nejblíže je však ten poslední, u kterého stačí formát změnit na '%m-%d'.

přičemž datum by měl být jako název sloupce odkud tahám data
Buď to nechápu, nebo je to neskutečná blbost.

tiso:
To právě nebude fungovat kvůli té nule. Ale možná tam tu nulu sktečně má. Bůh ví.
tiso
Profil
juriad: ja som reagoval na [#1] + pôvodný príspevok [#8] (prvý riadok)
Nuimi
Profil
NO popravde to od tiso funguje dokonale, porovnávám díky tomu data ve sloupci a funguje to
Toto vlákno je staré, již dlouho do něj nikdo nepřispíval.

Informace a odkazy zde uváděné už nemusejí být aktuální. Nechcete-li řešit zde uvedenou konkrétní otázku, založte si vlastní vlákno, nepište do tohoto. Vložíte-li sem nyní příspěvek, upoutáte pozornost mnoha lidí a někteří z nich si jen kvůli vám přečtou i všechny předcházející příspěvky. Předpokládáte-li, že váš text skutečně bude hodnotný, stiskněte následující tlačítko:


Běda vám, jestli to bude blábol.

0