Comment puis-je supprimer la date d'une chaîne de date / heure dans SQL SSIS?
-
20-08-2019 - |
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 ".
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 .