sql >> Database >  >> RDS >> Mysql

Werken met MySQL TIMESTAMP-kolommen in SQL Server

Soms moet u wat extra werk doen bij het integreren van twee verschillende DBMS-programma's. Hier is een tijdelijke oplossing die we hebben gebruikt om een ​​klant te helpen die problemen had bij het integreren van SQL Server met MySQL.

De klant kreeg de volgende foutmelding in SQL Server bij het werken met een MySQL TIMESTAMP-kolom.

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

De onderliggende reden hiervoor was dat in de MySQL-database van de klant ongeldige DATE-, DATETIME- of TIMESTAMP-waarden automatisch werden geconverteerd naar nullen (d.w.z. '0000-00-00' of '0000-00-00 00:00:00') . Een maand of dag van nul is geen geldige datum- of tijdcombinatie in SQL Server. Om dit te omzeilen, hebben we eerst de kolom die terugkomt van MySQL geconverteerd naar een char (20):

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

De waarde van de kolom '0000-00-0000:00:00' werd vervolgens geconverteerd naar NULL:

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')

Ten slotte, om de kolom "lastupdated" terug te brengen naar een datetime2, hebben we het volgende uitgevoerd:

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

  1. Wat zijn SQL-beperkingen en de verschillende typen?

  2. Hoe verborgen items in de VBA-objectbrowser te tonen

  3. Hoe verschillende waarden in SQL te tellen

  4. LOAD DATA LOCAL INFILE geeft de fout De gebruikte opdracht is niet toegestaan ​​met deze MySQL-versie