Ты же сам говоришь что использование функций языка программирования - это тупо, мол надо использовать функции БД??? ))) А что касается MySQL в пятой версии она не плохро подросла, тоже свои функции процедуры А с этим никто и не спорил, просто не нужно выдумывать велосипеды там где они не нужны.
Для меня например, Оракл - вполне обычная вещь, а точнее, ежедневная. И MySQL тоже. Поэтому, когда я задолбался и дома и на работе лазить в кучу справочников я стал хранить время — в секундах. ) Не-не... SYSDATE() в оракле нету. Есть SELECT SYSDATE FROM DUAL....
Горбунов Олег Ужас, ну тогда Oracle впринципе не совместим с обсалютным большинством баз данных Хорошо если хоть в TIMESTAMP хранят, а то умники бывают которые его в int пихают и тогда сделать такое (см. ниже) вообще не представляю как можно: PHP: BEGIN DECLARE done INT DEFAULT 0; DECLARE age, days, is_birthday INT DEFAULT NULL; DECLARE id INTEGER DEFAULT 0; DECLARE days_in_year INTEGER DEFAULT IF(IFNULL(DATE( CONCAT(IF(MONTH(NOW()) > 2, YEAR(NOW()), YEAR(NOW())+1), '-02-29')), 0) = 0, 365, 366); DECLARE cur CURSOR FOR SELECT prf_id, IF ( DATEDIFF(DATE(CONCAT(DATE_FORMAT(NOW(), "%Y"), DATE_FORMAT(prf_birthday, "-%m-%d"))), NOW() ) <= 0, DATE_FORMAT(NOW(), "%Y") - YEAR(prf_birthday), DATE_FORMAT(NOW(), "%Y") - 1 - YEAR(prf_birthday) ), IF(DATE_FORMAT(prf_birthday, '%d%m') = '2902', NULL, IF(days_in_year = TIMESTAMPDIFF(DAY, NOW(), prf_birthday + INTERVAL TIMESTAMPDIFF(YEAR, prf_birthday, NOW()) YEAR + INTERVAL 1 YEAR + INTERVAL 1 DAY), 0, TIMESTAMPDIFF(DAY, NOW(), prf_birthday + INTERVAL TIMESTAMPDIFF(YEAR, prf_birthday, NOW()) YEAR + INTERVAL 1 YEAR + INTERVAL 1 DAY))), IF(DATE_FORMAT(prf_birthday, "%m%d") = DATE_FORMAT(NOW(), "%m%d"), 1, 0) FROM profiles WHERE IF(in_prf_id IS NULL, TRUE, FALSE) OR prf_id=in_prf_id; DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1; OPEN cur; REPEAT FETCH cur INTO id, age, days, is_birthday; IF NOT done THEN UPDATE profiles SET prf_days_left = days, prf_age = age, prf_is_birthday = is_birthday WHERE prf_id = id; END IF; UNTIL done END REPEAT; CLOSE cur; END Это процедура в MySQL
ГЫ. Нет слов. =)И в курсор пихать?? Жесть =)) Да ладно.... не суть важно. ) Я же с самого начала сказал, кому как удобнее )))
про MySQL вы зря парня напугали типы полей можно использовать смело и ничего не боятся... DATE (ГГГГ-ММ-ДД) TIME (ЧЧ:ММ:СС) DATETIME (ГГГГ-ММ-ДД ЧЧ:ММ:СС) TIMESTAMP (ГГГГММДДЧЧММСС) > DATE_FORMAT - тебе поможет только помни что лучше поле возвращать с другим названием так как он после преобразования теряет свое свойство и становится текстом... Только вот TIMESTAMP имеет свойство по умолчанию менятся при апдейтах. (и это хорошо)