MariaDB не оценивает приведенные значения во время вставки - PullRequest
0 голосов
/ 26 февраля 2020

Я использую MariaDB 10.3.8.

Я пытаюсь очистить и вставить некоторые данные в таблицу. Я выполняю много явного преобразования, используя выражения типа CAST (MyDate as DATETIME), зная, что некоторые значения будут недействительными, и я хотел бы, чтобы эти значения были вставлены в мою таблицу как NULL. Тем не менее, MariaDB по-прежнему выдает ошибку, поскольку я ничего не разыгрываю. Возьмите этот код:

DROP TABLE IF EXISTS MySalesInfo;
CREATE TEMPORARY TABLE MySalesInfo (
    SaleDate DATETIME NULL DEFAULT '1900-01-01',
    TotalSales INT NULL
);

DROP TABLE IF EXISTS RawData;
CREATE TEMPORARY TABLE RawData (
    SaleID VARCHAR(250),
    SaleDate VARCHAR(250),
    FirstName VARCHAR(250),
    LastName VARCHAR(250)
);

INSERT INTO RawData
VALUES ('10001', '2020/02/01', 'Alice', 'Smith'),
('10002', '2020/02/17', 'Bob', 'Jones'),
('10003', 'Carol', 'Carol', 'Johnson');

INSERT INTO MySalesInfo (SaleDate, TotalSales)
SELECT CAST(SaleDate AS DATETIME) AS SaleDate, COUNT(*) AS TotalSales
FROM RawData
GROUP BY CAST(SaleDate AS DATETIME);

Строка, содержащая данные Кэрол, содержит некоторые данные мусора, и я хотел бы просто вставить эти данные со значением NULL для SaleDate. Запрос SELECT, который вставляется в MySalesInfo, возвращает следующее:

"NULL"  "1"
"2020-02-01 00:00:00"   "1"
"2020-02-17 00:00:00"   "1"

Однако я получаю сообщение об ошибке

"SQL Ошибка (1292): неверное значение даты и времени: 'Carol' ".

Я знаю, что 'Carol' является недопустимым значением DATETIME, но поскольку CAST ('Carol' AS DATETIME) возвращает NULL, почему этот оператор не вставляет NULL в SaleDate?

Более того, я получаю ту же ошибку при выполнении этого оператора вставки:

INSERT INTO MySalesInfo (SaleDate, TotalSales)
SELECT CAST(SaleDate AS DATETIME) AS SaleDate, COUNT(*) AS TotalSales
FROM RawData
WHERE CAST(SaleDate AS DATETIME) IS NOT NULL 
GROUP BY CAST(SaleDate AS DATETIME);

Это особенно сбивает с толку, когда оператор SELECT больше не возвращает строку для Кэрол. Это возвращает ТОЛЬКО строки с правильными датами, и все же я получаю ту же ошибку при попытке вставить данные. Почему это происходит?

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