|
|
|
| Подскажите, как вычислить возраст (полных лет) по дате рождения. Спс. | |
|
|
|
|
|
|
|
для: tAleks
(25.10.2009 в 08:43)
| | Самый простой вариант (однако, не самый точный) заключается в следующем
SELECT (TO_DAYS(NOW()) - TO_DAYS(putdate))/365.25 AS putdate FROM tbl
|
putdate - календарный столбец таблицы tbl. | |
|
|
|
|
|
|
|
для: cheops
(25.10.2009 в 10:56)
| | Drago в соседней ветви предложил логику
SELECT
`birthdate`,
FLOOR(
( REPLACE( CURDATE(), '-','')
-REPLACE(DATE(`birthdate`), '-','')
)/10000
) AS `Years`
FROM tbl
|
| |
|
|
|
|
|
|
|
для: Trianon
(25.10.2009 в 11:22)
| | Хм... любопытно, действительно изящное решение проблемы подсчета возраста. | |
|
|
|
|
|
|
|
для: Trianon
(25.10.2009 в 11:22)
| | От REPLACE можно избавиться:
SELECT
`birthdate`,
FLOOR(
( CURDATE() - DATE(`birthdate`) ) / 10000
) AS `Years`
FROM tbl
|
Вот ещё один вариант
SELECT
`birthdate`,
FLOOR(
PERIOD_DIFF(
DATE_FORMAT(CURDATE(), '%Y%m'),
DATE_FORMAT(`birthdate`, '%Y%m')
) / 12
) AS `Years`
|
| |
|
|
|
|
|
|
|
для: Саня
(25.10.2009 в 13:51)
| | >От REPLACE можно избавиться:SELECT
> `birthdate`,
> FLOOR(
> ( CURDATE() + 0 - DATE(`birthdate`) + 0 ) / 10000
> ) AS `Years`
> FROM tbl
красиво.
на заднем плане сидела мысль, что есть какой-то простой способ взять представление без дефисов, но я её не стал копать... не удивлюсь, что если убрать оба + 0 , то тоже покатит. | |
|
|
|
|
|
|
|
для: Trianon
(25.10.2009 в 13:57)
| | > если убрать оба + 0 , то тоже покатит
Я уже успел это проверить и отредактировать пост до вашего комментария ) | |
|
|
|
|
|
|
|
для: cheops
(25.10.2009 в 10:56)
| | А в чем заключается не точность?
Более точные варианты есть? | |
|
|
|
|
|
|
|
для: tAleks
(25.10.2009 в 11:22)
| | Неточность заключается в том, что год - единица плавающая.
И в зависимости от даты рождения, N лет при одном и том же N означает разный промежуток линейного времени.
Так что в терминах линейного времени считать года слегка некорректно. На что cheоps и намекнул. | |
|
|
|