sql >> Databasteknik >  >> RDS >> Mysql

Arbeta med MySQL TIMESTAMP-kolumner i SQL Server

Ibland behöver du göra lite extra arbete när du integrerar två olika DBMS-program. Här är en lösning som vi använde för att hjälpa en kund som hade problem när han försökte integrera SQL Server med MySQL.

Kunden fick följande fel i SQL Server när han arbetade med en MySQL TIMESTAMP-kolumn.

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

Den bakomliggande orsaken till detta var att i kundens MySQL-databas konverterades ogiltiga DATUM-, DATUMTIME- eller TIMESTAMP-värden automatiskt till nollor (dvs '0000-00-00' eller '0000-00-00 00:00:00') . En noll månad eller dag är inte en giltig datum- eller tidskombination i SQL Server. För att komma runt detta konverterade vi först kolumnen som kommer tillbaka från MySQL till en char(20):

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

Kolumnens värde '0000-00-0000:00:00' konverterades sedan till 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')

Slutligen, för att få tillbaka kolumnen "lastupdated" till en datetime2, körde vi:

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. MySQL:#126 - Felaktig nyckelfil för tabell

  2. dela nyckelord för post php mysql

  3. Anpassad formatering av datum/tid i SQL Server

  4. Hur man använder KNN Machine Learning Model med 2UDA – PostgreSQL och Orange (Del 1)