Задача
Вы хотите получить из имеющейся даты новую, заменив часть значений исходной даты.
Решение
Используйте функцию DATE_FORMAT() или TIME_FORMAT() для объединения частей существующих значений с теми частями, которые вы хотите заменить.
Обсуждение
Операцией, дополняющей разбиение значений дат и времени на части, является синтез значения из составляющих. Синтез дат и времени осуществляется при помощи функций форматирования (описано в данном рецепте) и объединения строк.
Значение даты часто формируется на основе имеющегося с заменой соответствующих частей. Например, чтобы найти первый день месяца, к которому относится дата, используйте DATE_FORMAT() для извлечения года и месяца из имеющейся даты и объедините их со значением дня 01:
mysql> SELECT d, DATE_FORMAT(d,'%Y-%m-01') FROM date_val;
+------------+---------------------------+
| d | DATE_FORMAT(d,'%Y-%m-01') |
+------------+---------------------------+
| 1864-02-28 | 1864-02-01 |
| 1900-01-15 | 1900-01-01 |
| 1987-03-05 | 1987-03-01 |
| 1999-12-31 | 1999-12-01 |
| 2000-06-04 | 2000-06-01 |
+------------+---------------------------+
Функцию TIME_FORMAT() можно использовать аналогично:
mysql> SELECT t1, TIME_FORMAT(t1,'%H:%i:00') FROM time_val;
+----------+----------------------------+
| t1 | TIME_FORMAT(t1,'%H:%i:00') |
+----------+----------------------------+
| 15:00:00 | 15:00:00 |
| 05:01:30 | 05:01:00 |
| 12:30:20 | 12:30:00 |
+----------+----------------------------+