2
votes

Changer le format de date M / j / aaaa hh: mm: ss en aaaa-MM-jj à l'aide de l'expression

Bonjour, j'ai un doute sur ssis

Je veux changer le format de la date M / j / aaaa hh: mm: ss en aaaa-MM-jj en utilisant ssis expression et le type de données de la variable DateFormat est une chaîne et obtient le format comme 5/28/2019 12:00:00 AM . Les données se présentent comme ci-dessous:

28/05/2019 00:00:00

Sur la base des valeurs ci-dessus, je veux une sortie dans une autre variable

28/05/2019

J'ai essayé une expression similaire

(DT_STR, 4, 1252) DATEPART("yy" , @[User::DateFormat])  + "-" + 
RIGHT("0" + (DT_STR, 2, 1252) DATEPART("mm" , @[User::DateFormat]), 2)  + 
"-" + RIGHT("0" + (DT_STR, 2, 1252) DATEPART("dd" , @[User::DateFormat]), 2)

mais j'obtiens une erreur comme ci-dessous:

INFORMATIONS SUPPLÉMENTAIRES:

La fonction "YEAR" ne prend pas en charge le type de données "DT_WSTR" pour paramètre numéro 1. Le type du paramètre ne peut pas être implicitement cast dans un type compatible pour la fonction. Pour effectuer ceci opération, l'opérande doit être explicitement casté avec un cast opérateur.

Échec de l'évaluation de la fonction "YEAR" avec le code d'erreur 0xC0047089.

La fonction "YEAR" ne prend pas en charge le type de données "DT_WSTR" pour paramètre numéro 1. Le type du paramètre ne peut pas être implicitement cast dans un type compatible pour la fonction. Pour effectuer ceci opération, l'opérande doit être explicitement casté avec un cast opérateur.

pouvez-vous s'il vous plaît me dire comment écrire une expression pour réaliser cette tâche dans ssis


1 commentaires

Poser plus de 25 questions sans accepter aucune réponse !! Veuillez lire la page de visite pour en savoir plus sur le vote positif et l'acceptation des réponses


3 Réponses :


2
votes

L'erreur principale est que la variable @ [User :: DateFormat] est une variable de chaîne tandis que la fonction DATEPART () ne peut être appliquée qu'à une valeur de date et d'heure. (Même si la variable chaîne stocke une valeur date / heure)

Vous pouvez bénéficier de la fonction TOKEN () pour y parvenir:

TOKEN(TOKEN( @[User::DateFormat],"/",3)," ",1) + "-" + 
RIGHT("0" + TOKEN( @[User::DateFormat],"/",2),2) + "-" + 
RIGHT("0" + TOKEN( @[User::DateFormat],"/",1) ,2)


0 commentaires

-1
votes

Créez une nouvelle variable dans votre package SSIS avec le type de données String et utilisez le champ datetime (ici comme @ [User :: Variable] ) entrant dans votre entrée dans cette variable comme dans l'expression ci-dessous:

(DT_WSTR, 4) YEAR( @[User::Variable]  ) + "-" + 
RIGHT("0"+(DT_WSTR,2)  MONTH( @[User::Variable]  ),2) + "-" +  
RIGHT("0"+(DT_WSTR, 2) DAY( @[User::Variable]  ),2)

Vous pouvez convertir cette variable chaîne en type de date ultérieurement si nécessaire.


5 commentaires

L'OP a mentionné que le type de données de la variable DateFormat est une chaîne , comment utiliser la fonction YEAR () ?!


Vous pouvez ensuite utiliser la conversion de type Date pour cela. Juste un peu de changement (DT_WSTR, 4) YEAR ((DT_DATE) @ [User :: Variable]) + "-" + RIGHT ("0" + (DT_WSTR, 2) MONTH ((DT_DATE) @ [User :: Variable ]), 2) + "-" + DROITE ("0" + (DT_WSTR, 2) JOUR ((DT_DATE) @ [User :: Variable]), 2)


Ce n'est pas la bonne manière, même si cela donne le résultat attendu. Pourquoi convertir en date puis en chaîne alors que vous pouvez utiliser TOKEN () pour extraire simplement ces parties?


D'accord. Je ne savais pas à propos de Token avant.


Vérifiez les fonctions TOKEN () et TOKENCOUNT () , elles sont très utiles: mssqltips.com/sqlservertip/3510/…



0
votes

J'ai ajouté des caractères typographiques pour la date. Cela aiderait

(DT_WSTR, 4) YEAR( (DT_DATE) @[User::Variable]  ) + "-" + RIGHT("0"+(DT_WSTR,2)  MONTH( (DT_DATE) @[User::Variable]  ),2) + "-" +  RIGHT("0"+(DT_WSTR, 2) DAY( (DT_DATE) @[User::Variable]  ),2)


0 commentaires