2013-04-02 31 views
7

Ho il seguente problema, sto usando SQL Server MS e sotto è il mio risultato. Sembra semplice ma non riesco a capirlo.Come visualizzare l'ora solo con AM/PM solo in una query SQL?

La mia domanda:

SELECT RIGHT(CONVERT(VARCHAR(26), Timein, 109), 14) from vwSignIn 

me questo darà come 9: 12: 16: 597AM

voglio questo 09:12:16 come il mio risultato.

Grazie in anticipo.

risposta

11

Ecco un modo si può fare:

CONVERT(VARCHAR(8), Timein, 108) + ' ' + RIGHT(CONVERT(VARCHAR(30), Timein, 9), 2) 

SQL Fiddle Demo

+4

ha funzionato perfettamente! Grazie mille! Vorrei votare ma non ho ancora abbastanza rappresentanti. – Apollo

+0

@Apollo - np, felice di poterti aiutare! – sgeddes

+1

-1 - Si interrompe per la mezzanotte! – JNK

18

Ecco un approccio con una sola conversione:

SELECT RIGHT(CONVERT(CHAR(20), GETDATE(), 22), 11); 

Tuttavia si dovrebbe prendere in considerazione la formattazione di questa sul lato client, dove la formattazione delle stringhe è molto più potente e appropriata.

In SQL Server 2012, sarà possibile utilizzare FORMAT(), il che significa che non è necessario memorizzare tutti questi numeri di stile (ma continuo a pensare che sia meglio farlo nel livello di presentazione quando possibile) :

SELECT FORMAT(GETDATE(), 'hh:mm:ss tt'); 

state attenti, FORMAT() is expensive relative to other approaches.

+0

ATTENZIONE: C'è una differenza tra questi due! Il primo dà un riempimento vuoto per ore <10 (ad esempio '3:33 PM'), l'altro utilizza uno zero imbottito (ad esempio '03: 33 PM '). Se è necessario evitare uno spazio iniziale per le ore precedenti 10, è sufficiente racchiudere un LTrim(). Per evitare lo zero riempito, utilizzare invece questa stringa di formato: 'h: mm: ss tt' Per riempire la prima risposta con uno zero, utilizzare invece: SELECT RIGHT ('0' + LTRIM (RIGHT (CONVERT (CHAR (20), GETDATE(), 22), 11)), 11) Sì, penso che lo riguardi. – MikeTeeVee

+0

Considerando che è il 2015 al momento della stesura di questo commento, ho votato molto l'opzione FORMAT() –

+1

@Zoran perché? Lo sapevi che non tutte le cose nuove e brillanti sono migliori? http://sqlperformance.com/2015/06/t-sql-queries/format-is-nice-and-all-but –

1

Trovo questo modo di essere un po 'più elegante:

SELECT LTRIM(Right(REPLACE(CONVERT(nvarchar(MAX),CAST(GetDate() as smalldatetime), 109),':00:000', ' '), 8)); 
0

Il modo più semplice Credo che è:

select ISNULL(CONVERT(VARCHAR(10), Timein, 100), '') 
1
SELECT substring(convert(varchar(20), GetDate(), 9), 13, 5) + ' ' + substring(convert(varchar(30), GetDate(), 9), 25, 2) 
+2

Benvenuti in Stack Overflow! Se tu potessi spiegare la tua risposta, sarebbe più facile da capire, grazie. – jv42

Problemi correlati