2012-07-24 35 views
5

Me gustaría obtener las 4:30 PM del día actual. La codificación rígida de esta manera no funciona:Construir fecha y hora usando la fecha de hoy a una hora específica

SELECT '07242012 16:30:00.000' 

Esto está resultando ser más difícil de lo que pensé. ¿Cómo me acerco a esto?

+0

En el futuro, puede ser muy útil si lo meantion versión de SQL Server que está utilizando. –

+0

Ah, actualizará la pregunta para reflejar eso. –

+0

Cambié la edición para indicar la versión mediante una etiqueta. Más fácil que tratar de encontrar la información de la versión enterrada en la pregunta. –

Respuesta

15

SQL Server 2000/2005:

SELECT DATEADD(MINUTE, 30, DATEADD(HOUR, 16, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP))); 

-- or 

SELECT DATEADD(MINUTE, (16*60) + 30, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP)) 

-- or 

SELECT CONVERT(DATETIME, CONVERT(CHAR(9), CURRENT_TIMESTAMP, 112) + '16:30'); 

SQL Server 2008+:

SELECT CONVERT(DATETIME, CONVERT(DATE, CURRENT_TIMESTAMP)) + '16:30'; 

SQL Server 2012:

SELECT SMALLDATETIMEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), DAY(GETDATE()), 16, 30); 
+0

¿Qué, no SQL 7? 6.5? :) –

+0

@NathanSkert Creo que el primer bloque de código también funcionará en 7.0/6.5, pero no voy a juntar una instancia para probarlo. :-) –

+0

Respuesta extremadamente completa, gracias Aaron! –

0

Probablemente la cosa más fácil de hacer es emitir el fecha/hora actual a una fecha (quitando el tiempo libre), transfiéralo a una fecha y hora para permitir el uso delsobrecargado de datetimey, finalmente, envía tu tiempo de texto deseado a una fecha y hora. En la siguiente manera:

select cast(cast(sysutcdatetime() as date) as datetime) + cast('16:30' as datetime) 

rendimientos (cuando se ejecuta el 11 Ene 2018):

2018-01-11 16:30:00.000 
+0

Esto realmente no responde la pregunta. Si tiene una pregunta diferente, puede formularla haciendo clic en [Preguntar pregunta] (https://stackoverflow.com/questions/ask). También puede [agregar una recompensa] (https://stackoverflow.com/help/privileges/set-bounties) para atraer más atención a esta pregunta. - [De la opinión] (/ crítica/mensajes de baja calidad/18476550) –

+0

Parece una respuesta razonable, pero sería mucho mejor si agregas alguna explicación de lo que está sucediendo aquí. Un fragmento de código por sí solo no es tan útil como un párrafo que explica lo que está haciendo, seguido de un código que ilustra la idea. – Caleb

+0

He ampliado la respuesta. Con suerte, parece ser más valioso ahora –

Cuestiones relacionadas