Avatar
Maros2470
Člen
Avatar
Maros2470:

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
Monarezio
Redaktor
Avatar
Monarezio:

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
First, solve the problem. Then, write the code.
Avatar
Maros2470
Člen
Avatar
 
Nahoru Odpovědět 2.7.2014 21:46
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Maros2470
Jan Vargovský:

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
Monarezio
Redaktor
Avatar
Monarezio:

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/…ary/tabh47cf(v=vs.110).aspx

Nahoru Odpovědět  +1 2.7.2014 21:53
First, solve the problem. Then, write the code.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Maros2470
David Čápka:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Maros2470
Jan Vargovský:
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:

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ý
Redaktor
Avatar
Odpovídá na Maros2470
Jan Vargovský:

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:

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ý
Redaktor
Avatar
Odpovídá na Maros2470
Jan Vargovský:

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:

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

 
Nahoru Odpovědět 2.7.2014 23:08
Avatar
Jan Vargovský
Redaktor
Avatar
Odpovídá na Maros2470
Jan Vargovský:
"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:

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
Redaktor
Avatar
Odpovídá na Maros2470
coells:
"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:

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
Redaktor
Avatar
jasper:

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
Redaktor
Avatar
jasper:

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:

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:

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.