У меня есть таблица, где дата рождения - 0000-00-00, где формат - ГГГГ-ММ-ДД. Я дал задание обновить эту дату до реального DOB.
DOB можно извлечь только из Идентификационного номера, который выглядит как 950313094353
(не реальный номер IC), а IC создается как YYMMDDSNRAND
, где SN
- это номер состояния, например, 09 и RAND
- это всего 4 случайные числа, например, 4353.
Из номера IC я могу получить дату рождения, подставив первые 6 цифр.
Стол
student_st
IC_NO D_BIRTH COUNTRY
------------ ---------- --------
940525053455 0000-00-00 MALAYSIA
Тип данных IC_NO - varchar, D_BIRTH - дата, а COUNTRY - varchar
Мой код, который я пробовал,
UPDATE `student_st`
SET `D_BIRTH` = CONCAT('19', (SELECT SUBSTR(`IC_NO`, 1, 2) FROM `student_st` WHERE `COUNTRY`='MALAYSIA'),
'-', (SELECT SUBSTR(`IC_NO`, 3, 2) FROM `student_st` WHERE `COUNTRY`='MALAYSIA'),
'-', (SELECT SUBSTR(`IC_NO`, 5, 2) FROM `student_st` WHERE `COUNTRY`='MALAYSIA'))
WHERE `COUNTRY`='MALAYSIA' AND DATE(`D_BIRTH`)='0000-00-00'
Это ошибка, которую я получаю
Error in query (1292): Truncated incorrect date value: '0000-00-00'
Я не знаю, почему об этом говорится.
Из моего кода ожидаемый результат равен 19YY-MM-DD
, где YY, MM и DD получены из подстроки с номером IC.