2009-05-20 6 views
9

Załóżmy, że mamy następujące rekordy w tabeli programu SQL Server.Zapytanie serwera SQL Server - policz odrębne pole DateTime

Date 
19/5/2009 12:00:00 pm 
19/5/2009 12:15:22 pm 
20/5/2009 11:38:00 am 

Jaka jest składnia SQL do uzyskania czegoś podobnego?

DataHrabia
19/5/2009
20/5/2009

+0

Jaki serwer bazy danych używasz? – Andomar

+0

Które RDBMS? Odpowiedź różni się w przypadku T-SQL, P/L SQL, itd ... –

+0

Przepraszamy, poprawiono w tytule. MS-SQL. Dzięki – OrElse

Odpowiedz

15

trzeba zrobić każdy grupowania w dniu Daty tylko wersja twoje pole daty, takie jak to.

SELECT 
    CONVERT(VARCHAR(10), YourDateColumn, 101), 
    COUNT(*) 
FROM 
    YourTable 
GROUP BY 
    CONVERT(VARCHAR(10), YourDateColumn, 101) 

Zwykle robię to jednak, ponieważ unika konwersji na varchar.

SELECT 
    DATEPART(yy, YourDateColumn), 
    DATEPART(mm, YourDateColumn), 
    DATEPART(dd, YourDateColumn), 
    COUNT(*) 
FROM 
    YourTable 
GROUP BY 
    DATEPART(yy, YourDateColumn), 
    DATEPART(mm, YourDateColumn), 
    DATEPART(dd, YourDateColumn) 

EDIT: Innym sposobem, aby uzyskać tylko data część DateTime

DATEADD(d, 0, DATEDIFF(d, 0, YourDateColumn)) 
+0

Podczas gdy nadal konwertuje się do varcharu, możesz przekonwertować go z powrotem na datetime (co daje godzinę 12:00 w tym dniu), lub możesz pobrać wyniki swoich datepartów i przekonwertować je na datetime. –

2

to zależy od silnika bazy danych. W przypadku SQL Server 2008 (i przyszłych wersji) można to zrobić, używając typu date.

select 
    convert(date, date_column_name) as Date, 
    count(1) as Count 

from table_name 

group by convert(date, date_column_name) 
1

Zależy od numeru DBMS. Przykład dla Mysql:

SELECT DATE_FORMAT(dateColumn, '%e/%c/%Y') as `date`, COUNT(*) 
FROM YourTable 
GROUP BY `date` 
+0

Grupuje się tylko przez rok. Chciał pełnej daty –

+0

Dzięki, naprawiłem to :) – soulmerge

0

W jakich systemach RDBMS jesteś? Korzystanie z Sybase, zapytanie będzie wyglądać następująco:

select date(datetimeColumn) as myDate, count(*) as myTotal 
from thisTable 
Group by myDate 
Order by myTotal, myDate 
0

Po Googling znaleźć ten jeden zbyt ...

SELECT CAST (podłoga (CAST (wyr1 AS float)) AS datetime) AS wyr1,

COUNT (*) AS wyr2

OD MY_TABLE

GROUP BY

CAST (FLOOR (CAST (Expr1 AS FLOAT)) AS DATEtime)

The cons?

  1. Wysoka szybkość realizacji
  2. Wyniki zwracane są w oryginalnej lokalizacji. Ex dla greckim 19/5/2009

Dziękuję wszystkim