2011-01-20 91 views
7

¿Cómo puedo convertir 24 hora con formato de hora en 12 hora formateada en SQL Server 2008?Conversión de una hora en formato de 12 horas en SQL

+1

Por qué no convertirlo en el código en lugar de la db? –

+0

@OrWeinberger, no estamos seguros de que haya otro código, ya que la pregunta solo menciona SQL, quizás podría tratarse de un informe. – kd7iwp

Respuesta

19

¿Tiene la hora actual en una variable/columna de tipo de tiempo? Si es así, es fácil:

declare @t time 
set @t = '14:40' 

select CONVERT(varchar(15),@t,100) 

resultado:

2:40PM 

Si está en una variable datetime(2), entonces usted tendrá que tira a la parte de fecha tras ejecutar el CONVERT. Si está en una cadena, primero CONVERT a time, luego use el código anterior.

+0

¿Por qué convertir el tiempo en una cadena? Probablemente esta no sea una buena idea en la mayoría de las circunstancias. – sqlvogel

+3

@dportas: si se dirige a una aplicación cliente, entonces estoy de acuerdo, sería mejor dejar que la aplicación haga el formateo. Por otro lado, si se trata de una consulta que define (digamos) una exportación a un archivo CSV (y cualquier sistema descabellado que quiera que este CSV quiera AM/PM en lugar de un valor de fecha y hora con formato ISO), entonces no veo el daño . Y dado que nos importa el formato, tenemos que convertirlo en una cadena. –

0

SQL Server no formatea la hora. Es su aplicación cliente la que controla cómo se muestra la hora. Debe cambiar la configuración del formato de hora en su aplicación o su código.

+0

Como una aplicación, debe almacenar en una fecha general como UTC y el cliente para convertir esa fecha a una fecha que se pueda relacionar con el cliente. –

6

A veces es necesario hacerlo en línea:

SELECT CONVERT(varchar(15), CAST(GETDATE() AS TIME), 100) as AmPmTime 
6

Para añadir al comentario de Radmin, la sintaxis es:

CONVERT(data_type,expression,style_code) 

Estos son algunos otros códigos de estilo que puede utilizar:

SELECT 
GETDATE() AS GetDate, 
CONVERT(VARCHAR,GETDATE(),0) AS '0', 
CONVERT(VARCHAR,GETDATE(),100) AS '100', 
CONVERT(VARCHAR,GETDATE(),1) AS '1', 
CONVERT(VARCHAR,GETDATE(),101) AS '101', 
CONVERT(VARCHAR,GETDATE(),7) AS '7', 
CONVERT(VARCHAR,GETDATE(),107) AS '107', 
CONVERT(VARCHAR,GETDATE(),108) AS '108', 
CONVERT(VARCHAR,GETDATE(),108) AS '108', 
CONVERT(VARCHAR,GETDATE(),10) AS '10', 
CONVERT(VARCHAR,GETDATE(),110) AS '110', 
CONVERT(VARCHAR,GETDATE(),12) AS '12', 
CONVERT(VARCHAR,GETDATE(),112) AS '112', 
CONVERT(VARCHAR,GETDATE(),14) AS '14', 
CONVERT(VARCHAR,GETDATE(),114) AS '114' 

Intenté publicar una imagen del conjunto de resultados, pero necesito "Ganar más de 10 reputación para publicar imágenes".

5
Select Right(IsNull(Convert(Varchar,GetDate(),100),''),7) 
+0

Eso funcionó para SQL Server 2005. Gracias. – MindLoggedOut

+0

¡funcionó bien! –

0

SQL puede realizar la conversión en línea de tiempo

mytime la base de datos es 4:15:00

SELECT CONVERT(varchar(15), CAST(mytime AS TIME), 100) as my_time from mytable 
Cuestiones relacionadas