Я использую 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 больше не возвращает строку для Кэрол. Это возвращает ТОЛЬКО строки с правильными датами, и все же я получаю ту же ошибку при попытке вставить данные. Почему это происходит?