SQL — Неверное целочисленное значение

#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 Server fertig в 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 .