Question

Je travaille sur un projet d'entrepôt de données et j'aimerais savoir comment (de préférence dans un composant Colonne dérivée d'un flux de données) supprimer l'élément de date d'un enregistrement de date / heure SQL.

Une fois que la date / heure est convertie en une heure seulement, je vais faire une recherche sur l'heure pour trouver l'enregistrement de temps associé dans une table de dimension temporelle.

Quelqu'un peut-il me donner une fonction simple pour accomplir cela dans une transformation de colonne dérivée?

Exemple: transformation d'une date / heure telle que & 12/02/2008 11:32:21 " simplement: & 11:32:21 AM ".

Était-ce utile?

La solution

Je voudrais juste faire un transtypage vers un type DT_DBTIME (en utilisant une transformation de colonne dérivée ou une transformation de type Convert). <=> contient seulement (heures, minutes, secondes) une partie de la date / heure, de sorte que vous supprimerez la partie de la date.

Autres conseils

En fait, si vous inversez les 2 premières expressions comme ceci: (DT_DBDATE)(DT_DATE)GETDATE() au lieu de (DT_DATE)(DT_DBDATE)GETDATE(), vous aurez TRUNCATE l'heure hors champ de la date.

Si l'expression DT_DATE est antérieure à l'expression DT_DBDATE, vous aurez toujours la partie heure dans votre sortie, mais celle-ci sera réinitialisée à zéro.

Si vous devez le faire dans une expression de variable, la solution de Michael ne fonctionnera pas, mais vous pouvez utiliser l'expression suivante:

(DT_DATE)(DT_DBDATE)GETDATE()

(DT_DBDATE) convertit la date et l'heure actuelles en date uniquement. Mais le nouveau type de données n'est pas compatible avec le datetime de SSIS. Par conséquent, vous devrez utiliser (DT_DATE) pour convertir en un type compatible.

Cette solution appartient à Russel Loski qui l’a publiée sur son blog: http://www.bidn.com / blogs / RussLoski / ssas / 1458 / conversing-datetime-to-date-in-ssis

Nous y sommes parvenus en écrivant un rapport pour une application de planification, nous avions besoin de l'heure stockée dans le cadre d'un type de données datetime. J'ai formaté la date-heure en tant que 0, ce qui vous donne ce lundi jj aaaa hh: miAM (ou PM), et je viens de faire une sous-chaîne de celle qui n'a retourné l'heure que dans un format AM / PM.

Exemple ci-dessous.

DECLARE @S DATETIME = GETDATE()

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

J'utilise personnellement une série de fonctions pour cela. Exemple:

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

J'aimerais réclamer tout le crédit, mais vous devriez aller à ce gars .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top