Mi código SQL muestra 00 en lugar de las 12 AM. ¿Cómo puedo ajustar esto?

Tengo el siguiente código que está funcionando muy bien para mí. Lo estoy usando en un paquete SSIS en SQL. El problema que tengo es que entre la medianoche y la 1:00 a.m., la hora se muestra como 00. Me gustaría quedarme con el siguiente código tanto como sea posible, ya que está funcionando para mí, pero solo hago los ajustes necesarios. . Cualquier ayuda sería muy apreciada!

Gracias, Juan

    SELECT     CASE WHEN DATEPART(hour, DateTimeField) < 13 THEN 
    RIGHT(REPLICATE(' ', 2) + CAST(datepart(hour, DateTimeField) AS VARCHAR(2)), 2) 
    ELSE 
    RIGHT(REPLICATE(' ', 2) + CAST(datepart(hour, dateadd(hour, - 12, DateTimeField))
    AS VARCHAR(2)), 2) END
1

2 Respuestas

Creo que simplemente podrías hacer esto en su lugar:

SELECT SUBSTRING(CONVERT(CHAR(14), DateTimeField, 100), 13, 2)
3
agregado
También tenga en cuenta que, dado que esto forma parte de un código más grande (o eso parece), podría reemplazar todo el lote con un mejor uso de la función CONVERT .
agregado el autor Tom H, fuente
@John: sí. Este código debe reemplazar todo el código que publicó en su pregunta.
agregado el autor Joe Stefanelli, fuente
@John CONVERT con estilo 100 produce mon dd yyyy hh : miAM (o PM) . Al convertir a CHAR (14), termino solo con los primeros 14 caracteres mon dd yyyy hh . Luego, la función SUBSTRING saca solo la parte hh .
agregado el autor Joe Stefanelli, fuente
Bueno, voy a intentarlo! ¿Entonces este código reemplazará todo el código que estoy usando actualmente? En breve les haré saber cómo ha quedado. ¡Gracias!
agregado el autor John, fuente
¡Buen punto! Podré probar esto en un momento. Seguro que es mucho más limpio que la forma en que lo estaba haciendo, y sí, eso era solo parte de un código más grande. ¡Gracias!
agregado el autor John, fuente
¡Esto funcionó perfecto! ¡Gracias! No entiendo completamente esta codificación, pero haré algunos más para buscarla, para futuras necesidades como esta. ¡Lo aprecio!
agregado el autor John, fuente
¡Gracias! Es bueno saber eso.
agregado el autor John, fuente

Asumiendo Oracle, ya que no lo especificaste. La técnica general es usar la función TO_CHAR y una plantilla de conversión de fecha que permita 01-12 en lugar de 00-23.

select to_char(sysdate, 'HH:MI:SS AM') from dual;

select to_char(sysdate, 'HH24:MI:SS') from dual;
0
agregado
Lo siento, es SQL 2008.
agregado el autor John, fuente