#mysql #sql #sql-server
Вопрос:
В настоящее время я работаю над проектом Airflow, и один из dag запускает этот SQL-запрос:
select CONVERT(date, GETDATE()) as datum,
sum(convert(int, fertig))/convert(float, count(*)) as servicegrad,
count(*) as position,
sum(Anzahl) as positionsdetails,
sum(convert(int, fertig)) as fertig, CASE
WHEN (Empfänger LIKE '%empfänger1%' or
Empfänger LIKE '%empfänger2%' or
Empfänger LIKE '%empfänger3%' or
Empfänger LIKE '%empfänger4%' or
Empfänger LIKE '%empfänger5%') THEN 'lager1'
WHEN (Empfänger LIKE '%empfänger6%' or Empfänger LIKE '%empfänger7%' or
Empfänger LIKE '%empfänger8%' or Empfänger LIKE '%9%') THEN 'lager2'
WHEN (Empfänger LIKE N'%empfänger10%' or
Empfänger LIKE '%empfänger11%' or
Empfänger LIKE '%empfänger11%' or
Empfänger LIKE '%empfänger12%' or
Empfänger LIKE '%empfänger13%') THEN 'Lager3'
ELSE 'lager4'
END as typ from wa left join (
select count(*) as Anzahl, WaID from wadetails
group by WaID
) as wad on wad.WaID = wa.ID
where (CONVERT(DATE, ABTermin) > CONVERT(date,DATEADD(day, -1,GETDATE()))
and
CONVERT(DATE, ABTermin) < CONVERT(date,DATEADD(day, 1,GETDATE())))
group by
CASE
WHEN (Empfänger LIKE '%empfänger1%' or
Empfänger LIKE '%empfänger2%' or
Empfänger LIKE '%empfänger3%' or
Empfänger LIKE '%empfänger4%' or
Empfänger LIKE '%empfänger5%') THEN 'lager1'
WHEN (Empfänger LIKE '%empfänger6%' or Empfänger LIKE '%empfänger7%' or
Empfänger LIKE '%empfänger8%' or Empfänger LIKE '%9%') THEN 'lager2'
WHEN (Empfänger LIKE N'%empfänger10%' or
Empfänger LIKE '%empfänger11%' or
Empfänger LIKE '%empfänger11%' or
Empfänger LIKE '%empfänger12%' or
Empfänger LIKE '%empfänger13%') THEN 'Lager3'
ELSE 'lager4'
END
Предполагается, что запрос передает данные из базы данных Mssql в базу данных Mysql. Но когда он запускается, я получаю эту ошибку:
_mysql_exceptions.OperationalError: (1366, "Incorrect integer value: 'lager4' for column 'fertig' at row 1")
Я думаю, что понимаю, что означает ошибка, значение «lager4» должно быть записано в тип столбца, но вместо этого записывается в столбец fertig. Но я, кажется, не могу найти проблему в запросе, которая приводит к ошибке.
Комментарии:
1.Кажется, я не могу найти проблему в querry, которая приводит к ошибке.
convert(int, fertig)
2. Итак, запрос в вашем вопросе заключается в выборе данных из SQL Server, но какой код вставляет их в MySQL? Похоже, столбцы не выровнены, поэтому он пытается вставить
typ
столбец из SQL Serverfertig
в MySQL.3. @Akina Привет, спасибо вам за ваши ответы. В mssql fertig-это битовое значение, и я пытаюсь суммировать их, чтобы подсчитать, сколько из них закончено.
4. @AlwaysLearning Смещение столбца имеет смысл. Я предполагаю, что мне придется изменить порядок таблицы Mysql или я могу изменить запрос, чтобы учесть смещение? Извините за все эти основные вопросы, но я знаком с работой с базами данных и sql
Ответ №1:
Это не ответит на ваш вопрос, но подскажет, где искать.
Если вы получаете ошибку MySQL, то код работает нормально в SQL Server. Проблема в том, однако, что вы вставляете значения в MySQL.
К счастью, это просто означает, что вам нужно взглянуть на SELECT
пункт. вам нужно посмотреть на типы столбцов в MySQL и выяснить, какие из них являются int
s.
Затем у вас возникает проблема с преобразованием. Возможности таковы:
datum
fertig
Anzal
typ
Когда вы узнаете, какие из этих столбцов являются целыми числами, вы сможете продолжить расследование.
Комментарии:
1. Привет, спасибо за ваш ответ. Я просмотрел типы :
datum
это дата ,fertig
это int(11),typ
это varchar(45) иAnzahl
не является столбцом в Mysql. Я последую вашим советам и взгляну на предложение SELECT и преобразование. Я также не заметил, чтоAnzahl
в mysql не было столбца, так что, возможно, именно это и вызвало проблему.2. @bayardim . . . Столбцы в неправильном порядке также могут быть проблемой. Вы должны посмотреть
insert
, чтобы увидеть явный порядок столбцов, используемый дляinsert
.