Mysql
 sql >> база данни >  >> RDS >> Mysql

Работа с MySQL TIMESTAMP колони в SQL Server

Понякога трябва да свършите малко допълнителна работа, когато интегрирате две различни програми за СУБД. Ето решение, което използвахме, за да помогнем на клиент, който имаше проблеми при опит да интегрира SQL Server с MySQL.

Клиентът получаваше следната грешка в SQL Server, когато работи с MySQL TIMESTAMP колона.

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

Основната причина за това беше, че в базата данни MySQL на клиента невалидни стойности DATE, DATETIME или TIMESTAMP автоматично се преобразуват в нули (т.е. '0000-00-00' или '0000-00-00 00:00:00') . Нулев месец или ден не е валидна комбинация от дата или час в SQL Server. За да заобиколим това, първо преобразувахме колоната, която се връща от MySQL, в char(20):

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

След това стойността на колоната „0000-00-0000:00:00“ беше преобразувана в 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')

И накрая, за да върнем колоната "lastupdated" обратно към datetime2, изпълнихме:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - Как да изберете данни по дължина на низа

  2. В SQL добре ли е две таблици да се отнасят една към друга?

  3. PHP PDO и MySQLi

  4. MySQL Errno 150

  5. Невалидна стойност по подразбиране за 'dateAdded'