sql >> Database teknologi >  >> RDS >> Mysql

Arbejde med MySQL TIMESTAMP-kolonner i SQL Server

Nogle gange skal du gøre lidt ekstra arbejde, når du integrerer to forskellige DBMS-programmer. Her er en løsning, vi brugte til at hjælpe en kunde, der havde problemer, da de forsøgte at integrere SQL Server med MySQL.

Kunden fik følgende fejl i SQL Server, da han arbejdede med en MySQL TIMESTAMP-kolonne.

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

Den underliggende årsag til dette var, at ugyldige DATE-, DATETIME- eller TIMESTAMP-værdier i kundens MySQL-database automatisk blev konverteret til nuller (dvs. '0000-00-00' eller '0000-00-00 00:00:00') . En nul måned eller dag er ikke en gyldig dato- eller tidskombination i SQL Server. For at omgå dette konverterede vi først kolonnen, der kom tilbage fra MySQL, til en char(20):

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

Kolonnens værdi '0000-00-0000:00:00' blev derefter konverteret til 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')

Til sidst, for at få kolonnen "lastupdated" tilbage til en datetime2, kørte 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. Sådan kortlægger du et PostgreSQL-array med Hibernate

  2. Hvordan forbinder man Postgres til localhost-serveren ved hjælp af pgAdmin på Ubuntu?

  3. Sådan indsætter du Excel- eller CSV-data i tabel ved hjælp af grafisk brugergrænseflade i SQL Server - SQL Server / TSQL Tutorial Del 102

  4. MySQL DROP UDENLANDSKE NØGLE-begrænsning