За последние 24 часа нас посетили 18013 программистов и 1650 роботов. Сейчас ищут 1304 программиста ...

Проблема с датой

Тема в разделе "MySQL", создана пользователем galem, 3 дек 2008.

  1. galem

    galem Активный пользователь

    С нами с:
    28 сен 2007
    Сообщения:
    11
    Симпатии:
    0
    Адрес:
    Ростов
    Дебрый день! У меня такая проблема:

    Есть таблица в БД.

    [sql]CREATE TABLE `tel_firm` (
    `kod_f` int(11) unsigned NOT NULL default '0',
    `nazv` varchar(255) NOT NULL,
    `kod_tel` int(11) unsigned NOT NULL default '0',
    `kod_a` int(11) unsigned NOT NULL default '0',
    `email` varchar(50) default NULL,
    `web` varchar(50) NOT NULL,
    `infopublic` varchar(255) NOT NULL,
    `exist_firm` int(11) unsigned default '0',
    `firm_inn` varchar(30) NOT NULL default '0',
    `DATE_UPDATE` date NOT NULL,
    PRIMARY KEY (`kod_f`),
    KEY `kod_tel` (`kod_tel`),
    KEY `kod_a` (`kod_a`)
    ) ENGINE=MyISAM DEFAULT CHARSET=utf8;[/sql]

    Есть дамп БД в файле.
    .....
    [sql]insert into tel_firm (kod_f, nazv, kod_tel, kod_a, email, web, infopublic, exist_firm, firm_inn, DATE_UPDATE) values (28344, 'Рога и Копыта', '1', '2', [email='roga@kopita.ru]'roga@kopita.ru[/email]', '', 'СРС', NULL,'1231231231','17.07.2008' );[/sql]
    .....

    Таблица эта драфтовая, для импорта. Скрипт должен читать содержимое из файла и записывать в БД. После записи даты сбиваются (становятся не такими как в файле). Написал триггер, который преобразует дату из dd.mm.yyyy в yyyy-mm-dd:

    [sql]CREATE TRIGGER `tel_firm_before_ins_tr` BEFORE INSERT ON `tel_firm`
    FOR EACH ROW
    BEGIN
    DECLARE currdate VARCHAR(10);
    SET currdate = CONCAT(SUBSTR(NEW.DATE_UPDATE, 7, 4), "-", SUBSTR(NEW.DATE_UPDATE, 4, 2), "-", SUBSTR(NEW.DATE_UPDATE, 1, 2));
    SET NEW.DATE_UPDATE = currdate;
    END;[/sql]

    В базе после вставки строк поле DATE_UPDATE выглядит так - 0000-00-00

    Подумал, может строка не так вставляется, преобразовал к DATE:

    [sql]CREATE TRIGGER `tel_firm_before_ins_tr` BEFORE INSERT ON `tel_firm`
    FOR EACH ROW
    BEGIN
    DECLARE currdate DATE;
    SET currdate = DATE(CONCAT(SUBSTR(NEW.DATE_UPDATE, 7, 4), "-", SUBSTR(NEW.DATE_UPDATE, 4, 2), "-", SUBSTR(NEW.DATE_UPDATE, 1, 2)));
    SET NEW.DATE_UPDATE = currdate;
    END;[/sql]

    Значение получаутся NULL

    В скрипте преобразовывать дату не хотелось бы, хотел триггер написать. Что не так, может есть соображения?