Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Maros2470
Člen
Avatar
Maros2470:2.7.2014 21:42

Zdravím. Mám dotaz. V databázi je uloženo datum ve formátu datum + čas.
Po načtení z databáze to potřebuji převést pouze na datum.
Můžete mi poradit? Díky.

 
Odpovědět
2.7.2014 21:42
Avatar
Samuel Kodytek
Tvůrce
Avatar
Samuel Kodytek:2.7.2014 21:43

Datum v jakém formátě? třeba 2/7/2014 a nebo 2. července 2014?

Nahoru Odpovědět
2.7.2014 21:43
There is more than one way to screw it
Avatar
Maros2470
Člen
Avatar
Odpovídá na Samuel Kodytek
Maros2470:2.7.2014 21:46

Ten první 2/7/2014

 
Nahoru Odpovědět
2.7.2014 21:46
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:2.7.2014 21:49

Nevím o tom, že by .Net měl zvlášť datum a zvlášť čas. Každopádně můžeš získat jen datum pomocí těchto metod DateTime.ToLon­gDateString() a DateTime.ToShor­tDateString().

 
Nahoru Odpovědět
2.7.2014 21:49
Avatar
Samuel Kodytek
Tvůrce
Avatar
Samuel Kodytek:2.7.2014 21:53

V mySQL databázi to je uložený takto:

2014-05-02 07:29:33.000000

a nejdříve potřebujeme rozdělit to datum... použíjeme

split

http://msdn.microsoft.com/…vs.110).aspx

Nahoru Odpovědět
2.7.2014 21:53
There is more than one way to screw it
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Maros2470
David Hartinger:2.7.2014 21:56

Vlastnost Date ti by ti měla vrátit DateTime kde je čas na 0:0 viz zdejší tutoriály.

Nahoru Odpovědět
2.7.2014 21:56
You are the greatest project you will ever work on.
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:2.7.2014 22:01
struct Date
{
    public short Day,Month,Year;
    public Date(short day, short month, short year)
    {
        Day = day;
        Month = month;
        Year = year;
    }

    public Date(string dateTime)
    {
        Year = short.Parse(dateTime.Substring(0, 4));
        Month = short.Parse(dateTime.Substring(5, 2));
        Day = short.Parse(dateTime.Substring(8, 2));
    }

    public override string ToString()
    {
        return string.Format("{0}/{1}/{2}", Day, Month, Year);
    }
}

Užití:

Date date = new Date("2014-05-02 07:29:33.000000");

Nebo se prostě spokojit s DateTime a cpát tam formát do ToString.

 
Nahoru Odpovědět
2.7.2014 22:01
Avatar
Maros2470
Člen
Avatar
Odpovídá na Jan Vargovský
Maros2470:2.7.2014 22:21

Jde mi o to, že se mi v databázi ukládají záznamy s datem a přesným časem uložení. To proto, aby se po načtení databáze zobrazovala pouze poslední aktualizace záznamu a to i tehdy, že dojde ke změnám v průběhu několika vteřin.

V případě, že chci, ale udělat součet (SUM) položek všech záznamů z daného dne, tak to vypíše hodnotu pouze u poslední změny a ne součet ze všech záznamů tohoto dne.

příklad:

zboží tržba datum

pivo 48,- 2.7.2014 20:15:45
pivo 72,- 2.7.2014 20:17:02
rum 40,- 2.7.2014 20:17:05

Když dám "SUM(Trzba) Where Datum.Now.ToShor­tString()" je výsledek 40,-,
ale já pořebuji získat 160,-, prostě celkový součet ze 2.7.2014.

Aby v podmínce WHERE datum ignorovalo čas

Editováno 2.7.2014 22:24
 
Nahoru Odpovědět
2.7.2014 22:21
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:2.7.2014 22:31

Pak můžeš použít vlastnost Date.

 
Nahoru Odpovědět
2.7.2014 22:31
Avatar
Maros2470
Člen
Avatar
Odpovídá na Jan Vargovský
Maros2470:2.7.2014 22:49

To už jsem zkoušel, ale v tomto případě to nevypíše žádnou položku, ani tu poslední. Problém tam asi dělá ten uložený čas. Mám to napsáno takto:

using (SqlCeConnection spojeni = new SqlCeConnection(connectionString))
            {
                spojeni.Open();
                string dotaz = "SELECT SUM(Trzba) AS TrzbaCelkem FROM Zrcadlo WHERE Datum=@datum ";
                using (SqlCeDataAdapter adapter = new SqlCeDataAdapter(dotaz, spojeni))
                using (DataSet vysledky = new DataSet())
                {
                    adapter.SelectCommand.Parameters.AddWithValue("@datum", DateTime.Now.Date);
                    adapter.Fill(vysledky);
                    foreach (DataRow radek in vysledky.Tables[0].Rows)
                    {

                        trzbaToolStrip.Text = radek["TrzbaCelkem"].ToString();  // načtení ceníku

                    }
                }
                spojeni.Close();
            }
 
Nahoru Odpovědět
2.7.2014 22:49
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:2.7.2014 23:05

Tak ty porovnáváš datum + čas s datem... Musíš z té db vytáhnout jen datum.

 
Nahoru Odpovědět
2.7.2014 23:05
Avatar
Maros2470
Člen
Avatar
Odpovídá na Jan Vargovský
Maros2470:2.7.2014 23:08

Na to směřovala ta moje první otázka. Jak na to?

 
Nahoru Odpovědět
2.7.2014 23:08
Avatar
Jan Vargovský
Tvůrce
Avatar
Odpovídá na Maros2470
Jan Vargovský:2.7.2014 23:18
"SELECT SUM(Trzba) AS TrzbaCelkem FROM Zrcadlo WHERE cast(Datum as date)=@datum"
 
Nahoru Odpovědět
2.7.2014 23:18
Avatar
Maros2470
Člen
Avatar
Odpovídá na Jan Vargovský
Maros2470:2.7.2014 23:29

Zkusil jsem to, ale na řádku: adapter.Fill(vys­ledky);
mi to vyhazuje chybu: The specified data type is not valid. [ Data type (if known) = date ]

 
Nahoru Odpovědět
2.7.2014 23:29
Avatar
coells
Tvůrce
Avatar
Odpovídá na Maros2470
coells:2.7.2014 23:35
"SELECT SUM(Trzba) AS TrzbaCelkem FROM Zrcadlo WHERE Datum>=@datum ";

adapter.SelectCommand.Parameters.AddWithValue("@datum", DateTime.Today);
Editováno 2.7.2014 23:36
 
Nahoru Odpovědět
2.7.2014 23:35
Avatar
Maros2470
Člen
Avatar
Odpovídá na coells
Maros2470:2.7.2014 23:41

Tady to zase vyhazuje chybu: There was an error parsing the query. [ Token line number = 1,Token line offset = 60,Token in error = > ]

Už z toho začínám blbnout. Půlden hledám na netu a nedaří se

 
Nahoru Odpovědět
2.7.2014 23:41
Avatar
jasper
Tvůrce
Avatar
jasper:3.7.2014 9:23

zkus využít toto:

select prodej_id,datum,DATEPART(yyyy,datum) as rok,DATEPART(mm,datum) as mesic,DATEPART(dd,datum) as den,getdate() as dnes
from prodej
where DATEPART(yyyy,datum) = DATEPART(yyyy,getdate()) and DATEPART(mm,datum) = DATEPART(mm,getdate());
8-)
 
Nahoru Odpovědět
3.7.2014 9:23
Avatar
jasper
Tvůrce
Avatar
jasper:3.7.2014 9:25

omlouvám se ještě vysvětlení,
datum je ve formátu datetime a getdate() jen vrací aktuální "datum čas"
to je jen pro vyzkoušení

 
Nahoru Odpovědět
3.7.2014 9:25
Avatar
Odpovídá na Maros2470
Michal Štěpánek:3.7.2014 9:41

Taky jsem s tím bojoval a nakonec jsem to obešel tím, že jsem si dal hledat datum vyšší než včerejší. Není to sice esteticky pěkné řešení, ale funguje...

Editováno 3.7.2014 9:42
Nahoru Odpovědět
3.7.2014 9:41
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
Maros2470
Člen
Avatar
Odpovídá na Michal Štěpánek
Maros2470:3.7.2014 11:31

Taky jsem to tak udělal, v rámci mých schopností a znalostí asi jediné řešení. I tak díky za rady, něco jsem se zase přiučil.

 
Nahoru Odpovědět
3.7.2014 11:31
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 20 zpráv z 20.