2009-05-04 29 views
10

Come si converte hh: mm: ss in hh: mm in SQL Server?Come convertire hh: mm: ss in hh: mm in 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 

risposta

8

In generale, l'insieme di timestamp non è well-ordered, questo significa che non è possibile ottenere un timestamp "ultimo" il cui tempo parte fino a minuti è 2009-05-06 14:58.

In SQL Server, che mantiene la parte di tempo di un datetime come un certo numero di 1/300 seconde frazioni dopo la mezzanotte, questa "ultima" timestamp sarebbe 2009-05-06 14:58:59.997, ma questo non è garantito per essere compatibile con versioni future di con altri TIMESTAMP stoccaggio metodi.

Ciò significa che è necessario dividere la sua condizione BETWEEN in due condizioni, una delle quali è strict less che il minuto successivo:

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 

questa soluzione in modo efficiente utilizzare gli indici sulla Date

1

Per questo necessità specifica è necessario utilizzare il metodo tra come indicato da Quassnoi's answer. Tuttavia, il problema generale può essere risolto con:

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

Non penso che ci sia una funzione integrata; di solito fare qualcosa di simile

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) 

Utilizzando varchar (5) troncherà automaticamente la data per rimuovere i secondi.

19

CONVERT(VARCHAR(5),Date, 108) - ottiene solo HH:mm

+0

Il tuo codice funziona correttamente –

1

Un modo sarebbe quello di utilizzare la funzione di destra() per ritagliare la data. Qualcosa del tipo:

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

Questo funziona solo se il numero di caratteri è costante, ad es. c'è uno zero iniziale se applicabile. (Scusa, non ha qui il server SQL da testare).

Un modo migliore è utilizzare il T-SQL datepart funzione di dividere e poi ri-concatinate le parti della data così:

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

Riferimenti:

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

Per ottenere il formato hh: mm dalla data di oggi:

select getdate() 

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

Per ottenere formato hh: mm da qualsiasi colonna datetime in un data tabella:

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

Mentre codice uniche risposte può risolvere il problema originale, sarebbe aiutare gli altri leggendo la tua risposta se hai dato qualche commento/spiegazione come quello che stai facendo e perché. –

Problemi correlati