Возникла проблема при попытке создать таблицу с помощью запроса, получая код ошибки: 1292 Неправильное значение времени: «2020-00-00:00:00». - PullRequest
0 голосов
/ 06 марта 2020
drop table if exists d;
create table d

Select *
from
(Select Bill_No, Bill_Date, Amount, Printed_By, Pay_Mode, Cashier, 
        Option_Name, Reprint_Reason, print_date, Print_Time, Settled_Date, 
        Settled_Time,
        TIMESTAMPDIFF(minute,cast(concat(lpad(substring(print_date,-2,2),4,20),'-',lpad(month(str_to_date(substring(print_date,(locate('-',print_date)+1),locate('-',trim(print_date),4)-(locate('-',print_date)+1)),'%b')),2,0),
'-',substring(print_date,1,2),' ',Print_Time) as char),cast(concat(lpad(substring(Settled_Date,-2,2),4,20),'-',lpad(month(str_to_date(substring(Settled_Date,(locate('-',Settled_Date)+1),locate('-',trim(Settled_Date),4)-(locate('-',Settled_Date)+1)),'%b')),2,0),
'-',substring(Settled_Date,1,2),' ',Settled_Time) as char)) as Total_time_Minutes

from audit_report) as derived

[Ниже приведен отчет по аудиту, и я объединил дату печати со временем печати, а затем дату расчета с установленным временем, так что оба становятся датой и временем, поэтому теперь я использую timestampdiff для вычисления общего номера. минут между двумя объединенными датами, однако я получаю желаемый результат, но когда я пытаюсь создать таблицу из запроса, я получаю сообщение об ошибке.]

enter image description here

1 Ответ

0 голосов
/ 06 марта 2020

Я должен согласиться с комментариями о том, что вам лучше использовать столбцы DATETIME в вашем источнике, а не хранить дату и время отдельно в виде строк. Однако, предполагая, что вы не контролируете структуру вашего источника, этот запрос с использованием str_to_date() и timestamp() может быть легче проанализировать;

SELECT ar.bill_no
     , ar.bill_date
     , ar.amount
     , ar.printed_by
     , ar.pay_mode
     , ar.cashier
     , ar.option_name
     , ar.reprint_reason
     , ar.print_date
     , ar.print_time
     , ar.settled_date
     , ar.settled_time
     , TIMESTAMPDIFF(MINUTE,
                     TIMESTAMP(ar.print_date, ar.print_time),
                     TIMESTAMP(ar.settled_date, ar.settled_time)) AS total_time_minutes
FROM (SELECT bill_no
           , bill_date
           , amount
           , printed_by
           , pay_mode
           , cashier
           , option_name
           , reprint_reason
           , print_date
           , str_to_date(print_date, '%d-%b-%y')   AS print_date
           , str_to_date(print_time, '%T')         AS print_time
           , str_to_date(settled_date, '%d-%b-%y') AS settled_date
           , str_to_date(settled_time, '%T')       AS settled_time
      FROM audit_report) ar;

nb. Решение использовать подзапрос здесь состоит в том, чтобы избежать дублирования вызовов str_to_date(). Обычно это было бы избыточно.


предостережение: это не было проверено и не может быть, если вы не предоставите пример данных и свой исходный ddl.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...