2009-05-04 13 views
10

Jak przekonwertować gg: mm: ss na hh: mm w SQL Server?Jak przekonwertować gg: mm: ss na hh: mm w SQL Server?

select Count(Page) as VisitingCount,Page,CONVERT(VARCHAR(8),Date, 108) from scr_SecuristLog 
where Date between '2009-05-04 00:00:00' and '2009-05-06 14:58' 
and [user] in(select USERNAME    
    from scr_CustomerAuthorities) 
group by Page,Date order by [VisitingCount] asc 

Odpowiedz

8

Generalnie zestaw znaczników czasu nie jest well-ordered, to oznacza, że ​​nie może dostać „ostatni” znacznik czasu, którego czas część do minuty jest 2009-05-06 14:58.

W SQL Server, która utrzymuje razem część datetime jako liczby 1/300 drugiej frakcji po północy, to „ostatni” timestamp byłoby 2009-05-06 14:58:59.997, ale to nie jest gwarantowane jest zgodny z przyszłymi wydaniami z innymi TIMESTAMP przechowywania metody.

Oznacza to, że trzeba podzielić na dwie stan BETWEEN warunkach, z których jeden jest strict less niż następnego minutę:

select Count(Page) as VisitingCount,Page,CONVERT(VARCHAR(8),Date, 108) from scr_SecuristLog 
where Date >= '2009-05-04 00:00:00' 
     AND Date < DATEADD(minute, 1, '2009-05-06 14:58') 
and [user] in(select USERNAME    
    from scr_CustomerAuthorities) 
group by Page,Date order by [VisitingCount] asc 

Rozwiązanie to efektywnie wykorzystywać indeksów Date

1

Do tego specyficzne potrzeby należy użyć metody między, jak zauważył Quassnoi's answer. Jednak ogólny problem można rozwiązać za pomocą:

select dateadd(second, -datepart(second, @date), @date) 
1

Nie sądzę, że jest wbudowana funkcja; Zwykle zrobić coś takiego

SET @time = '07:45' 
SET @date = CONVERT(DATETIME,@time) 
SELECT @date 

SELECT LEFT(CONVERT(VARCHAR,@date,108),5) 
4
SELECT Convert(varchar(5), GetDate(), 108) 

Korzystanie varchar (5) automatycznie skrócić termin do usunięcia sekund.

19

CONVERT(VARCHAR(5),Date, 108) - Pobiera tylko HH:mm

+0

Twój kod działa poprawnie –

1

Jednym sposobem byłoby użyć funkcji w prawo(), aby przyciąć Data. Coś takiego:

RIGHT(CONVERT(VARCHAR(8),Date, 108),5) 

Będzie działać tylko wtedy, gdy liczba znaków jest stała, np. w razie potrzeby znajduje się wiodące zero. (Niestety nie ma tu serwera SQL do przetestowania).

Lepszym sposobem jest użycie T-SQL datepart funkcję dzielenia i ponownie concatinate tym terminie części tak:

DARTPART("hh", CONVERT(VARCHAR(8),Date, 108))+":"+DARTPART("mi", CONVERT(VARCHAR(8),Date, 108)) 

Literatura:

http://msdn.microsoft.com/en-us/library/ms174420.aspx
http://msdn.microsoft.com/en-us/library/ms187928.aspx
http://msdn.microsoft.com/en-us/library/ms177532.aspx

0

Aby uzyskać gg: mm od dzisiejszej daty:

select getdate() 

select convert(varchar(5),getdate(),108) 

Aby uzyskać HH: MM z dowolnej kolumny datetime w danych tabeli:

select date_time_column_name from table_name where column_name = 'any column data name' 

select convert(varchar(5),date_time_column_name,108) from table_name 
where column_name = 'any column data name' 

select creationdate from employee where Name = 'Satya' 

select convert(varchar(5),creationdate,108) from employee 
where Name = 'Satya' 
0
SELECT CAST(CAST(GETDATE() AS Time(0)) AS VARCHAR(5)) 
+0

Chociaż tylko kodu odpowiedzi może rozwiązać oryginalny problem, że to pomoże innym czytając twoją odpowiedź, jeśli podałeś kilka komentarzy/wyjaśnień, jak to, co robisz i dlaczego. –

Powiązane problemy