2010-07-08 12 views

risposta

26

Un modo è:

SELECT LTRIM(RIGHT(CONVERT(VARCHAR(20), GETDATE(), 100), 7)) 

Se si dispone di uno sguardo Books Online here, formato 100 è quella che ha il fattore tempo nel formato in cui lo vuoi inserire, è solo un caso di togliere la data dal davanti.

+3

Questo stamperà le 8:00 PM, ma penso che la domanda stia cercando 20:00 PM – Andomar

+3

@Andomar - buon punto. Se questo è davvero ciò che è necessario, direi che l'AM/PM è irrilevante e suggerire un approccio più conciso anche se – AdaTheDev

1

è necessario utilizzare CONVERT funzione:

CONVERT(VARCHAR, yourdatetimefiled, 114) AS [HH:MI(12H)] 
+2

Secondo MSDN, 114 = 'hh: mi: ss: mmm (24h)'. – Oded

+0

ma voglio nel formato HH: mm tt e non fornisce informazioni tt come AM o PM – Azhar

+0

Ho scritto la risposta a memoria perché non ho accesso MSSQL al momento. Credo che AdaTheDev abbia capito bene. – Anax

0
select right(convert(char(20),getdate(),0),7) 

Nessun controllo se

9

Avrete bisogno di due convertiti, uno per ottenere il HH: tempo mm, ed uno per ottenere AM/PM. Per esempio:

declare @date datetime 
set @date = '20:01' 
SELECT CONVERT(VARCHAR(5), @date, 108) + ' ' + 
     SUBSTRING(CONVERT(VARCHAR(19), @date, 100),18,2) 

Questo stampa:

20:01 PM 

In una query di selezione, sostituire @date con il nome della vostra colonna.

+0

sostituirei SubString() e Convert() con un singolo DatePart() e Case-Statement. Ciò ti darà anche un maggiore controllo sull'involucro/capitalizzazione del tuo AM/PM. Ad esempio (CASE WHEN DATEPART (HOUR, GETDATE()) <12 THEN 'am' ELSE 'pm' END) Puoi anche includere lo spazio in 'am' e 'pm' in modo da avere anche una concatenazione in meno. – MikeTeeVee

2

SQL Server 2008

SELECT 
CONVERT(TIME,GETDATE()) AS HourMinuteSecond, 
CONVERT(DATE,GETDATE(),101) AS DateOnly 
GO 

Risultato:

HourMinuteSecond: 13:06:56.5770000 
DateOnly:   2012-07-26 

SQL Server 2000/2005

SELECT 
CONVERT(VARCHAR(8),GETDATE(),108) AS HourMinuteSecond, 
CONVERT(VARCHAR(8),GETDATE(),101) AS DateOnly 
GO 
1
select cast(getdate() as time)) [time], 
+0

La risposta è incompleta. La modifica è ancora più interessante! – SoftDev

+0

SQL Sevrer 2005 non supporta il tipo 'Time', quindi questa risposta è completamente falsa. –

2
select substring(CONVERT(VARCHAR, getdate(), 114),1,5) 

resault: 22:05

1

Questo vi dà l'datetime reale e non VARCHAR

CAST(LEFT(YOURDATETIME,12) AS SMALLDATETIME) AS YOURNEWDATE 
Problemi correlati