Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Arbeiten mit MySQL TIMESTAMP-Spalten in SQL Server

Manchmal müssen Sie etwas mehr Arbeit leisten, wenn Sie zwei verschiedene DBMS-Programme integrieren. Hier ist eine Problemumgehung, die wir verwendet haben, um einem Kunden zu helfen, der Probleme hatte, als er versuchte, SQL Server mit MySQL zu integrieren.

Der Kunde erhielt den folgenden Fehler in SQL Server, als er mit einer MySQL-TIMESTAMP-Spalte arbeitete.

select * from openquery(MYSQL, 'select lastupdated from carriers')
Error converting data type DBTYPE_DBTIMESTAMP to datetime2.

Der Grund dafür war, dass in der MySQL-Datenbank des Kunden ungültige DATE-, DATETIME- oder TIMESTAMP-Werte automatisch in Nullen umgewandelt wurden (z. B. '0000-00-00' oder '0000-00-00 00:00:00'). . Ein Nullmonat oder -tag ist keine gültige Kombination aus Datum und Uhrzeit in SQL Server. Um dies zu umgehen, haben wir zuerst die von MySQL zurückkommende Spalte in ein char(20) umgewandelt:

select * from openquery(MYSQL, 'select cast(lastupdated as char(20) ) as
lastupdated from carriers')

Der Spaltenwert '0000-00-0000:00:00' wurde dann in NULL konvertiert:

select case lastupdated when '0000-00-00 00:00:00' then null else lastupdated
end as lastupdated from openquery(MYSQL, 'select cast(lastupdated as char(20) )
as lastupdated from carriers')

Um schließlich die Spalte „lastupdated“ auf datetime2 zurückzusetzen, haben wir Folgendes ausgeführt:

select cast(x.lastupdated as datetime2) as lastupdated from ( select case
lastupdated when '0000-00-00 00:00:00' then null else lastupdated end as
lastupdated from openquery(MYSQL, 'select cast(lastupdated as char(20) ) as
lastupdated from carriers limit 100') ) x