Pregunta

Estoy trabajando en un proyecto de almacén de datos y me gustaría saber cómo (preferiblemente en un componente de Columna Derivada en un flujo de Datos) quitar la pieza de fecha de un registro de fecha y hora de SQL.

Una vez que convierta la fecha y hora en solo una hora, haré una búsqueda de la hora para encontrar el registro de tiempo relacionado en una tabla de dimensiones de tiempo.

¿Puede alguien darme una función simple para lograr esto dentro de una transformación de columna derivada?

Ejemplo: Transforme una fecha y hora como " 02/12/2008 11:32:21 AM " en simplemente " 11: 32: 21 AM " ;.

¿Fue útil?

Solución

Simplemente haría una conversión al tipo DT_DBTIME (usando la transformación de columna derivada o la transformación de tipo Convertir). <=> contiene solo (horas, minutos, segundos) parte de la fecha / hora, por lo que eliminará la parte de la fecha.

Otros consejos

En realidad, si invierte las 2 primeras expresiones como esta: (DT_DBDATE)(DT_DATE)GETDATE() en lugar de (DT_DATE)(DT_DBDATE)GETDATE(), entonces TRUNCATE el tiempo estará fuera del campo de fecha.

Si la expresión DT_DATE es anterior a la expresión DT_DBDATE, aún tendrá la parte de tiempo en su salida, pero se restablecerá a todos los ceros.

Si necesita hacer esto en una expresión variable, la solución de Michael no funcionará, pero puede usar la siguiente expresión:

(DT_DATE)(DT_DBDATE)GETDATE()

(DT_DBDATE) convierte la fecha y hora actuales solo en una fecha. Pero el nuevo tipo de datos no es compatible con la fecha y hora de SSIS. Por lo tanto, tendrá que usar (DT_DATE) para convertir a un tipo compatible.

La cortesía de esta solución pertenece a Russel Loski, quien la publicó en su blog: http://www.bidn.com / blogs / RussLoski / ssas / 1458 / converting-datetime-to-date-in-ssis

Me encontré con esto al escribir un informe para una aplicación de programación, necesitaba el tiempo almacenado como parte de un tipo de datos de fecha y hora. Formateé la fecha y hora como 0, lo que le da este mes dd aaaa hh: miAM (o PM), y solo hice una subcadena de la que devolvió la hora solo en formato AM / PM.

Ejemplo a continuación.

DECLARE @S DATETIME = GETDATE()

SELECT SUBSTRING(CONVERT(NVARCHAR(30), @S , 0) , 13 , 10) AS ApptTime
    , CONVERT(NVARCHAR(30), @S , 0) AS ApptDate

Yo personalmente uso una serie de funciones para esto. Por ejemplo:

ALTER FUNCTION [dbo].[TIMEVALUE]
(
 @Datetime datetime
)
RETURNS datetime
AS
BEGIN
    RETURN (@Datetime - CAST(ROUND(CAST(@Datetime AS float), 0, 1) AS datetime))
END

Me encantaría reclamar todo el crédito, pero realmente debería ir a este chico .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top