sql >> Databáze >  >> RDS >> Mysql

Práce se sloupci MySQL TIMESTAMP v SQL Server

Někdy je potřeba udělat trochu práce navíc při integraci dvou různých DBMS programů. Zde je řešení, které jsme použili, abychom pomohli zákazníkovi, který měl problémy při pokusu o integraci SQL Serveru s MySQL.

Při práci se sloupcem MySQL TIMESTAMP se zákazníkovi v SQL Serveru zobrazila následující chyba.

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

Hlavním důvodem bylo to, že v databázi MySQL zákazníka byly neplatné hodnoty DATE, DATETIME nebo TIMESTAMP automaticky převedeny na nuly (tj. '0000-00-00' nebo '0000-00-00 00:00:00') . Nulový měsíc nebo den není platnou kombinací data nebo času na serveru SQL Server. Abychom to vyřešili, nejprve jsme převedli sloupec přicházející z MySQL na char(20):

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

Hodnota sloupce '0000-00-0000:00:00' byla poté převedena na 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')

Nakonec, abychom dostali sloupec „lastupdated“ zpět na datum a čas2, spustili jsme:

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. Sloučení/kombinace více souborů PDF do jednoho PDF v Oracle pomocí balíčku PLPDF_TOOLKIT PL/SQL

  2. Jak PERIOD_DIFF() funguje v MariaDB

  3. Proč Postgres nepoužívá index?

  4. Jak najít záznamy s NULL ve sloupci