Преобразование двузначных значений года в четырехзначные

Задача
Вам нужно преобразовать составляющую года в значениях дат из двузначной в четырехзначную.

Решение
Доверьтесь MySQL. Если же правила преобразования MySQL вас не устраивают, выполните операцию самостоятельно.

Обсуждение
Двузначные значения года создают проблемы, потому что в значениях дат явно не указывается век. Если вам известен диапазон годов, охватываемый вводом, вы можете однозначно определить и добавить к значениям век. В противном случае остается только гадать. Например, большинство американцев, вероятно, восприняло бы дату 2/10/69 как 2 октября 1969 года. Но если речь идет о дне рождения Махатмы Ганди, то имеется в виду 1869 год.

Одним из способов преобразования годов к четырехзначному виду является использование возможностей MySQL. Если вы сохраняете дату, содержащую двузначный год, то MySQL автоматически преобразует его в четырехзначную форму. Для MySQL переходной точкой является 1970 год; значения от 00 до 69 интерпретируются как годы с 2000 по 2069, а значения от 70 до 99 – как годы с 1970 по 1999. Такие правила верны для значений годов в диапазоне от 1970 до 2069. Если ваши значения выходят за рамки данного диапазона, вам следует добавлять соответствующий век самостоятельно перед сохранением значений в MySQL.

Чтобы использовать другую точку перехода, преобразуйте годы к четырехзначному формату вручную.


Напишем универсальную программу, которая преобразует двузначные значения года в четырехзначные, поддерживая произвольную точку перехода:

sub yy_to_ccyy
{
my ($year, $transition_point) = @_;
$transition_point = 70 unless defined ($transition_point);
$year += ($year >= $transition_point ? 1900 : 2000) if $year < 100;
return ($year);
}

По умолчанию эта функция использует точку перехода MySQL (70). Можно задать необязательный второй аргумент для определения другой точки пере-хода. Перед выполнением преобразования функция yy_to_ccyy() проверяет, действительно ли оно необходимо (меньше ли значение, чем 100). Поэтому вы можете передавать ей значения, не проверяя предварительно, содержат ли они значение века. Вызовы с точкой перехода по умолчанию имеют такие результаты:

$val = yy_to_ccyy (60); # возвращает 2060
$val = yy_to_ccyy (1960); # возвращает 1960 (преобразование не проводилось)

Но предположим, что вы хотите преобразовать значения годов следующим образом, используя в качестве точки перехода 50:

00 .. 49 -> 2000 .. 2049
50 .. 99 -> 1950 .. 1999

Передайте аргумент точки перехода в yy_to_ccyy():

$val = yy_to_ccyy (60, 50); # возвращает 1960
$val = yy_to_ccyy (1960, 50); # возвращает 1960 (преобразование не проводилось)
Функция yy_to_ccyy() включена в библиотечный файл Cookbook_Utils.pm..



Оцените статью: (0 голосов)
0 5 0

Статьи из раздела MySQL на эту тему:
Диагностическая утилита для LOAD DATA
Извлечение и перестановка столбцов файлов данных
Импорт XML в MySQL
Импорт с помощью LOAD DATA и утилиты mysqlimport
Импорт файлов в формате CSV

Вернуться в раздел: MySQL / 10. Импорт и экспорт данных