web-dev-qa-db-fra.com

Comment convertir une chaîne au format aaaaMMjj à ce jour en utilisant l'expression SSIS?

J'ai un rendez-vous 20130131 en csv que j'essaie de convertir en 2013-13-01 en utilisant la colonne dérivée dans SSIS. J'ai utilisé cette expression mais elle ne semble pas fonctionner.

(DT_DBTIMESTAMP) (SUBSTRING (DATE_DECISION_TO_REFER, 1,2) + "-" + SUBSTRING (DATE_DECISION_TO_REFER, 3,2) + "-" + SUBSTRING (DATE_DECISION_TO_REFER, 5,2))

Comment réécrire cette expression pour produire la sortie correcte avec une valeur de type de données DT_DBTIMESTAMP?

12
Djbril

Selon Kyle Hale suggestion, voici ma réponse

    SUBSTRING([DATE_DECISION_TO_REFER],1,4) + "-" +
 SUBSTRING([DATE_DECISION_TO_REFER],5,2) + "-" + SUBSTRING([DATE_DECISION_TO_REFER],7,2)

Pour vous éduquer afin que vous ne soyez plus jamais confronté à ce problème, voici comment fonctionne l'expression

 Get 4 characters from DATE_DECISION_TO_REFER starting at position 1, add a dash,
 get 2 characters from DATE_DECISION_TO_REFER starting at position 5,
 add a dash then add 2 characters from DATE_DECISION_TO_REFER starting at position 7.

J'espère que cela vous aidera.

16
Zerotoinfinity

Fast Parse est une solution beaucoup plus élégante

  1. Ajoutez un composant de flux de données .
  2. Clic droit, Afficher l'éditeur avancé ...
  3. Aller aux propriétés d'entrée et de sortie
  4. Développez la sortie de conversion de données et cliquez sur la colonne de date
  5. Définissez FastParse sur True dans les propriétés personnalisées
  6. Assurez-vous que le type de données est défini sur date de la base de données [DT_DBDATE]
  7. Réexécutez le package ssis. Les dates aaaammjj devraient se dérouler sans problème de nvarchar à date
16
Louie Bao

Expression:

Vous devez utiliser l'expression pour formater la date en yyyy-MM-dd comme indiqué ci-dessous. Cette expression formatera la valeur entrante 20130131 à 2013-01-31 puis sera converti en type de données approprié. L'expression utilise la colonne entrante nommée Column0.

(DT_DBTIMESTAMP) (SUBSTRING (Column0,1,4) + "-" + SUBSTRING (Column0,5,2) + "-" + SUBSTRING (Column0,7,2))

Problème:

Votre expression prend la valeur 20130131, puis la conversion incorrecte en la valeur 20-13-01. Il s'agit d'un format non valide pour les dates et, par conséquent, l'expression ne parvient pas à taper le cast en DT_DBTIMESTAMP Type de données.

10
user756519