5 votes

Conversion de teradata timestamp(6) en datetime pour SQL Server

Je travaille sur une exportation de données à partir de SSIS, et j'ai une erreur de troncature dans l'un de mes projets :

[TH27 [91]] Erreur : "Une erreur de troncature s'est produite. Le nom de la colonne est 'mydate'."

Dans l'entrée (Teradata), j'ai une colonne de type timestamp(6) et dans le résultat de SQL Server, j'ai une colonne de type datetime .

Comment puis-je le convertir de manière à ce que je n'obtienne pas ce type d'erreur lorsque j'utilise SSIS ?

Ma tentative (demande 1) :

SELECT 
    column1,
    CAST(CAST(CAST(mydate AS DATE FORMAT 'YYYY-MM-DD') AS CHAR(10)) || ' ' 
             || TRIM(EXTRACT(HOUR FROM (mydate))) || ':'
             || TRIM(EXTRACT(MINUTE FROM (mydate))) || ':'
             || TRIM(CAST(EXTRACT(SECOND FROM (mydate)) AS INTEGER)) AS Date) AS mydate,
    column2
FROM table1

Mise à jour :

La requête que j'ai écrite était dans la source Teradata - voici un exemple de mon schéma SSIS

My SSIS Schema

2voto

dnoeth Points 42688

C'est probablement parce que le serveur SQL ne prend pas en charge 6 chiffres fractionnaires, et qu'il l'a converti en une chaîne de 3 chiffres fractionnaires sur Teradata :

To_Char(myDate,'yyyy-mm-dd hh:mi:ss.ff3')

1voto

JohnHC Points 8708

Si mydate est un horodatage, il suffit de le convertir :

select column1,
       cast(mydate as datetime) as column2
from MyTable

Ok, donc exécuter dans teradata signifie que vous n'avez pas de datetime... Mais vous avez la date et l'heure :

select column1,
       cast(mydate as date) as column2date,
       cast(mydate as time) as column2time
from MyTable

Vous pouvez ensuite utiliser ssis pour manipuler les données et combiner la date et l'heure dans une datetime MSSQL.

0voto

Esperadoce Points 487

J'ai trouvé cette solution, qui fonctionne pour moi en SSIS est de supprimer la dernière partie que nous avons en timestamp(6) et le convertir ensuite en timestamp(0) .

select column1,
       CAST(SUBSTRING(CAST(mydate AS CHAR(26)) FROM 1 FOR 19) AS TIMESTAMP(0))
       as mydate 
from MyTable

0voto

crumble Points 56

N'utilisez pas cast on date(time), utilisez convert. Cela ne fonctionnera que sur votre machine ;) Dès que vous devez gérer plusieurs cultures, cela peut échouer à cause des différentes représentations du format de la date.

En dehors des États-Unis, vous rencontrerez très vite de telles erreurs. De nombreux systèmes de développement utilisent les paramètres américains pour faciliter la recherche des messages d'erreur, mais le système du client fonctionne avec les paramètres de la langue locale et, dans le pire des cas, avec des paramètres linguistiques différents pour le système d'exploitation et la base de données. La meilleure façon de gérer ce problème est d'utiliser le format ISO (120) en interne.

0voto

Kamesh Karkhur Points 1

Chargement de données de teradata vers sql à l'aide de SSIS. Cela fonctionne pour moi convertir Timestamp(6) pour datetime pour sql server

To_Char(myDate,'yyyy-mm-dd hh:mi:ss.ff3')

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X