Domanda

Sto lavorando a un progetto di data warehouse e vorrei sapere come (preferibilmente in un componente Colonna derivata in un flusso di dati) eliminare la parte di data da un record datetime SQL.

Una volta che il datetime è stato convertito in una sola ora, cercherò una ricerca dell'ora per trovare il relativo record temporale in una tabella dimensionale.

Qualcuno può darmi una semplice funzione per realizzare questo all'interno di una trasformazione di colonna derivata?

Esempio: trasformare un datetime come " 12/02/2008 11:32:21 " in semplicemente " 11: 32: 21 AM " ;.

È stato utile?

Soluzione

Farei solo un cast per il tipo DT_DBTIME (usando la trasformazione Colonna derivata o Converti trasformazione tipo). <=> contiene solo (ore, minuti, secondi) parte della data / ora, quindi eliminerai la parte della data.

Altri suggerimenti

In realtà se inverti le prime 2 espressioni in questo modo: (DT_DBDATE)(DT_DATE)GETDATE() anziché (DT_DATE)(DT_DBDATE)GETDATE(), quindi TRUNCATE l'ora fuori dal campo data.

Se l'espressione DT_DATE è precedente all'espressione DT_DBDATE, avrai comunque la porzione di tempo nell'output, ma verrà reimpostato su tutti gli zero.

Se devi farlo in un'espressione variabile, la soluzione di Michael non funzionerà, ma puoi usare la seguente espressione:

(DT_DATE)(DT_DBDATE)GETDATE()

(DT_DBDATE) converte la data e l'ora correnti solo in una data. Ma il nuovo tipo di dati non è compatibile con il datetime di SSIS. Pertanto dovrai utilizzare (DT_DATE) per la conversione in un tipo compatibile.

Per gentile concessione di questa soluzione appartiene a Russel Loski che l'ha pubblicata nel suo blog: http://www.bidn.com / blogs / RussLoski / SSAS / 1458 / convertire-datetime-to-date-in-SSIS

Ci siamo imbattuti in questo con la stesura di un report per un'app di pianificazione, il tempo necessario è stato archiviato come parte di un tipo di dati datetime. Ho formulato il datetime come 0 che ti dà questo lun gg aaaa hh: miAM (o PM), e ho appena fatto una sottostringa di quello che ha restituito il tempo solo in un formato AM / PM.

Esempio di seguito.

DECLARE @S DATETIME = GETDATE()

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

Uso personalmente una serie di funzioni per questo. Per esempio:.

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

Mi piacerebbe richiedere tutto il credito, ma dovrei davvero andare a questo ragazzo .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top