microsoft Conversion de l'horodatage teradata(6) en datetime pour SQL Server




microsoft connectors v5 0 for oracle (4)

Si mydate est l'horodatage, il suffit de le lancer:

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

Ok, donc l'exécution de 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 afin de combiner la date et l'heure dans un datetime MSSQL

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 la sortie dans SQL Server, j'ai une colonne de type datetime .

Comment puis-je le convertir de telle sorte que lorsque j'utilise SSIS, je ne reçois pas ce genre d'erreur?

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

Mettre à jour:

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


Ne pas utiliser cast sur date (heure), utilisez convert. Cela ne fonctionnera que sur votre machine;) Dès que vous avez à gérer plusieurs paramètres de culture, cela peut échouer car différentes représentations de chaîne du format de date.

En dehors des Etats-Unis, vous courez très vite dans de telles erreurs. De nombreux systèmes de développement utilisent les paramètres américains pour faciliter la recherche de messages d'erreur, mais le système client s'exécute dans les paramètres de langue locale et, au pire, sur les différents paramètres de langue pour OS et DB. La meilleure façon de gérer cela est d'utiliser le format ISO (120) en interne.


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

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

C'est probablement parce que SQL Server ne supporte pas 6 chiffres fractionnaires, alors le cast en une chaîne avec 3 chiffres fractionnels sur Teradata:

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






teradata