Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Trabalhando com colunas MySQL TIMESTAMP no SQL Server


Às vezes você precisa fazer um pouco de trabalho extra ao integrar dois programas DBMS diferentes. Aqui está uma solução alternativa que usamos para ajudar um cliente que estava tendo problemas ao tentar integrar o SQL Server ao MySQL.

O cliente estava recebendo o seguinte erro no SQL Server ao trabalhar com uma coluna MySQL TIMESTAMP.
select * from openquery(MYSQL, 'select lastupdated from carriers')
Error converting data type DBTYPE_DBTIMESTAMP to datetime2.

A razão subjacente para isso foi que no banco de dados MySQL do cliente, valores inválidos de DATE, DATETIME ou TIMESTAMP estavam sendo convertidos automaticamente em zeros (ou seja, '0000-00-00' ou '0000-00-00 00:00:00') . Um mês ou dia zero não é uma combinação de data ou hora válida no SQL Server. Para contornar isso, primeiro convertemos a coluna voltando do MySQL para um char(20):
select * from openquery(MYSQL, 'select cast(lastupdated as char(20) ) as
lastupdated from carriers')

O valor da coluna '0000-00-0000:00:00' foi então convertido em 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')

Finalmente, para obter a coluna "lastupdated" de volta para um datetime2, executamos:
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