Diskuze: Filtrování podle času
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.

Člen

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí SQL a databází, jsme si ověřili nabyté zkušenosti z kurzu.
SELECT [ID]
,convert(varchar,cas,108) [cas]
FROM [Login]
where cas between '15:00:00' and '20:00:00'
order by id desc
sloupec cas je nastavený v databázi jako datetime v databázi tam vidím
datum i čas.
potřebuji zjistit kdo se v určitý čas každý den přihlašuje
SELECT *
FROM NazevTabulky
WHERE convert(varchar, SloupecSDateTime, 108) BETWEEN '15:00:00' AND '20:00:00'
Takhle funguje bez problémů. Z dotazu jsem nepochopil, jestli máš zkonvertovanou hodnotu v počítaném sloupci, nebo jestli děláš convert až dotazu samotném. Navíc jsem předpokládal, že
where název_tabulky
byl jen překlep, proto jsem chtěl vidět celý dotaz. Tak snad to stačí takhle. Redakci se omlouvám za spam.
Viz ondrej, tamto neni sql dotaz, ale nejaka sablona sql dotazu, to pomoci sql nespustis. Ale musis to necim preformatovat na sql dotaz. A ten nas prave zajima. Jinak bys to nasel asi googlem. Pro ruzna sql se to zapisuje jinak mssql/mysql/oracle
ja mám mssql a ve formatu co to napsal Ondřej tak mi to funguje.
Az na to, ze to konvertuje sloupec misto konstanty. Coz je pro WHERE docela znacne zpomaleni. Jakoze to budes blbe indexovat a bude ti to hledat treba 2 minuty misto 10ms
Zase taková tragédie to nebude. Zkusil jsem si pár testů na tabulce s 12M záznamů a rozdíl je skoro zanedbatelný. Ale pro klid tvé duše doporučuji autorovi vytvořit computed persisted sloupec:
ALTER TABLE [Login] ADD SpocitanyCas AS CONVERT(varchar(8), cas, 108) PERSISTED
A vytvořit si na něm index:
CREATE INDEX IX_Login_SpocitanyCas ON [Login] (SpocitanyCas)
Myslim si, ze nejaky slozitejsi sql dotaz s joiny by mohl delat problemy. A
je to skvely napad s tim dalsim sloupcem. Ten cas jsem schvalne prehnal
Zobrazeno 10 zpráv z 10.