Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: DATETIME: изменить дату, не затрагивая время
 
 автор: Igorek   (24.04.2012 в 14:10)   письмо автору
 
 

запрос:
UPDATE `table` 
SET `date` = CAST(CONCAT(CURDATE(),' ', TIME(`date`)) AS DATETIME)
WHERE id = 236


результат:
Affected rows: 0

запрос2:
UPDATE `table` 
SET `date` = NOW()
WHERE id = 236


результат:
Affected rows: 1

почему первый не сработал?

контекст - хочу сделать обновление поля date, причем обновить только дату, т.е. время чтобы тоже самое осталось. Тип поля timestamp, но пробовал и datetime - результат тот же

  Ответить  
 
 автор: cheops   (24.04.2012 в 14:15)   письмо автору
 
   для: Igorek   (24.04.2012 в 14:10)
 

Попробуйте без CAST, просто присвоить результат CONCAT(). Результат тот же?

  Ответить  
 
 автор: Igorek   (24.04.2012 в 15:15)   письмо автору
 
   для: cheops   (24.04.2012 в 14:15)
 

Результат тот же.

  Ответить  
 
 автор: Valick   (24.04.2012 в 15:13)   письмо автору
 
   для: Igorek   (24.04.2012 в 14:10)
 

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

  Ответить  
 
 автор: Igorek   (24.04.2012 в 15:26)   письмо автору
 
   для: Valick   (24.04.2012 в 15:13)
 

всю логику долго объяснять) да это и не нужно.
попробуйте сами:
CREATE TABLE `test` (
    `date` DATETIME NULL
);
INSERT INTO `test` (`date`) VALUES (NOW());


затем:
UPDATE `test` 
SET `date` = CONCAT(CURDATE(), " ", TIME(`date`))


>может удобнее хранить дату и время в отдельных полях?
перебирать весь проект ради этого?! увольте))

что-то с запросом не так. не могу понять только что(

  Ответить  
 
 автор: Valick   (24.04.2012 в 15:49)   письмо автору
 
   для: Igorek   (24.04.2012 в 15:26)
 

SET `date` = CONCAT(CURDATE(), " ",TIME_FORMAT(`date`,"%H:%i:%s"))


дайте мне ссылку на функцию TIME() в MySQL

  Ответить  
 
 автор: cheops   (24.04.2012 в 15:54)   письмо автору
 
   для: Valick   (24.04.2012 в 15:49)
 

Она в 5 версии по-моему появилось, т.е. относительно недавно (но она точно есть и вырезает время).

  Ответить  
 
 автор: Valick   (24.04.2012 в 16:00)   письмо автору
 
   для: cheops   (24.04.2012 в 15:54)
 

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

  Ответить  
 
 автор: cheops   (24.04.2012 в 16:05)   письмо автору
 
   для: Valick   (24.04.2012 в 16:00)
 

Версии по-дурацки указываются, фиг чего найдешь, только в документации мажорной версии. Введена она оказывается в MySQL 4.1.1., вот в "MySQL 3.23, 4.0, 4.1 Reference Manual" эту информацию можно найти, а в документации к следующим версиям уже нет. В MySQL всегда так поступают (ну по крайней мере поступали до недавнего времени).

  Ответить  
 
 автор: Lotanaen   (24.04.2012 в 15:57)   письмо автору
 
   для: Igorek   (24.04.2012 в 15:26)
 

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

  Ответить  
 
 автор: Igorek   (24.04.2012 в 16:04)   письмо автору
 
   для: Lotanaen   (24.04.2012 в 15:57)
 

Да, действительно так.
Я то вот думал, что при апдейте в любом случае Affected Rows будет 1...
Т.е. код верный (и CAST здесь не нужен), а вот интерпретация результатов подвела))

Всем спасибо за помощь!

  Ответить  
 
 автор: Valick   (24.04.2012 в 16:12)   письмо автору
 
   для: Lotanaen   (24.04.2012 в 15:57)
 

странно, у меня тоже заработало, хотя сначала время в нули сбрасывало

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования