C# týden November Black Friday
Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Pouze tento týden sleva až 80 % na e-learning týkající se C#
Avatar
michal Čepelák:7. října 14:28

Potřeboval bych ze záznamu, kde mám časové údaje o uložení vyfiltrovat pouze záznamy, které se dali v jaký koliv den pouze v čase např. mezi 15:00:00 až 20:00:00

Zkusil jsem: Mám datový typ datetime 2019-10-07 10:10:20.000 převedl jsem si ho na varchar conver(varchar, nazev_sloupce, 108) do podoby 10:10:20 a použil jsem

where název_tabulky between '15:00:00' and '20:00:00'

ale to mi nefunguje

Chci docílit: snažím se dosáhnout aby mi to filtrovalo např. za měsíc září každý den, všechny uložené záznamy od 15:00:00 do 20:00:00

Děkuji za rady

 
Odpovědět
7. října 14:28
Avatar
Ondřej Crha
Redaktor
Avatar
Odpovídá na michal Čepelák
Ondřej Crha:7. října 14:44

Můžeš ukázat celý dotaz?

 
Nahoru Odpovědět
7. října 14:44
Avatar
Odpovídá na Ondřej Crha
michal Čepelák:7. října 14:53
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

Editováno 7. října 14:54
 
Nahoru Odpovědět
7. října 14:53
Avatar
Ondřej Crha
Redaktor
Avatar
Ondřej Crha:7. října 14:59
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.

Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět
7. října 14:59
Avatar
Odpovídá na Ondřej Crha
michal Čepelák:7. října 15:02

Děkuji funguje

 
Nahoru Odpovědět
7. října 15:02
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na michal Čepelák
Peter Mlich:7. října 15:04

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

 
Nahoru Odpovědět
7. října 15:04
Avatar
Odpovídá na Peter Mlich
michal Čepelák:7. října 15:05

ja mám mssql a ve formatu co to napsal Ondřej tak mi to funguje.

 
Nahoru Odpovědět
7. října 15:05
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:7. října 15:09

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

 
Nahoru Odpovědět
7. října 15:09
Avatar
Ondřej Crha
Redaktor
Avatar
Odpovídá na Peter Mlich
Ondřej Crha:7. října 15:30

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)
 
Nahoru Odpovědět
7. října 15:30
Avatar
Peter Mlich
Člen
Avatar
Odpovídá na Ondřej Crha
Peter Mlich:8. října 8:03

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 :)

 
Nahoru Odpovědět
8. října 8:03
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 10 zpráv z 10.