Задача
Даты в вашем файле данных являются неполными, то есть в них отсутствуют какие-то составляющие.
Решение
MySQL может представить их в формате ISO, используя для недостающих составляющих нули.
Обсуждение
Некоторые приложения используют неполные даты. Например, вам может потребоваться обработка таких значений ввода, как Mar/2001, которые содержат только месяц и день. Начиная с версии MySQL 3.23 можно представлять такие значения датами в формате ISO, которые содержат нули вместо недостающих составляющих. (Значение Mar/2001 может храниться как 2001-03-00.)
Чтобы преобразовать значения месяц/год в формат ISO для импортирования в MySQL, создайте хеш для сопоставления названиям месяцев их числовых значений:
my %map = # сопоставить названию месяца его номер
(
"jan" => 1, "feb" => 2, "mar" => 3, "apr" => 4, "may" => 5, "jun" => 6,
"jul" => 7, "aug" => 8, "sep" => 9, "oct" => 10, "nov" => 11, "dec" => 12
);
Тогда каждое значение ввода будет преобразовано следующим образом:
if ($val =~ /^([a-z]{3})\/(\d{4})$/i)
{
my ($m, $y) = (lc ($1), $2); # использовать название месяца в нижнем регистре
$val = sprintf ("%04d-%02d-00", $y, $map{$m})
}
После сохранения результирующих значений в MySQL можно извлекать их для отображения в исходном формате месяц/год, выполняя предложение SELECT, форматирующее даты при помощи выражения DATE_FORMAT():
DATE_FORMAT(date_val,'%b/%Y')