oracle возраст по дате рождения

Я часто вижу людей, которые предполагают, что DATEDIFF(YEAR, date_of_birth, GETDATE()) определят текущий возраст человека.

То есть в случае параметра YEAR DATEDIFF подсчитывает количество пересеченных 1-января. С параметром MONTH он будет считать число 1-го числа прошедшего месяца.

Так, например, ребенку, родившемуся 31 декабря 17 года, уже будет «1 год», когда на самом деле ему не исполнится 1 год до 31 декабря 18 года, и в настоящее время ему 0 лет.

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

Я ищу ответ в следующих терминах:

Ответ должен быть встроенным выражением, которое можно выбрать или включить в предложение where.

Для тех, чьи дни рождения приходятся на 29 февраля, они должны рассматривать свой возраст как возрастающий 29 февраля, если базовым годом является високосный год, или должны относиться к их возрасту с 1 марта, если базовым годом не является високосный год.

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

Честно говоря, учитывая, сколько тонко неправильных ответов предостаточно (как я упоминал выше в моем первом абзаце), я бы подумал, что этот вопрос получит больше голосов и больше интереса, чем число голосов и 3, чтобы закрыть.

4 ответа

Правильный ответ

Собранный из приведенных источников, это правильный ответ для SQL Server (с 2012 года) :

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

Неправильные ответы

Я просто подумал, что потрачу минуту на то, чтобы найти неправильные ответы в разных источниках, на пользу будущим читателям.

Как уже упоминалось в моем вопросе, это первый подход, который многие пытаются использовать. К сожалению, он учитывает только разницу в летней части даты, поэтому ребенку, родившемуся 31 декабря 17 года, исполняется 1 год 1 января 18 года. Это хорошо, но не правильно.

Похоже, это еще один общий подход, который также был приведен в комментарии к моему вопросу.

Дальнейшее уточнение делителя «число дней в году» после десятичной запятой не помогает, так как любой делитель выше 365 точно, в этом случае потерпит неудачу. Это хорошо, но не правильно.

Разновидностью (2) является использование часов вместо дней. В каждом дне есть фиксированное количество часов, поэтому 8766/24 = 365,25. Мы видим, что это решение эквивалентно (2). Это хорошо, но не правильно.

Другой вариант заключается в использовании округления по часам. Это имеет тот же дефект, что и (3), по тем же причинам, но дополнительно, если задействован компонент времени, он округляет вверх за последние 30 минут дня до ко дню рождения. Это хорошо, но не правильно.

Другие исследовали, может ли DAYOFYEAR предоставить решение. К сожалению, из-за високосных лет стандарт DAYOFYEAR не сопоставляется согласованно с конкретными датами (месяцами и месяцами) года. Это хорошо, но не правильно.

Возможно ответ

Это на самом деле может быть ближе к общему соглашению о том, когда день рождения отмечается для детей високосного года, но я указал в своем вопросе, что в таких случаях день рождения для целей расчета возраста человека следует рассматривать как 1 марта (что соответствует законодательству Великобритании).

MONTHS_BETWEEN также имеет другие причуды, которые могут быть нежелательны для расчета возраста (например, если он используется для расчета возраста в виде количества месяцев, например, для детей младше 1 года, когда выпадает «день рождения») в один и тот же день месяца или в последующие месяцы).

Это хорошо, , и в некоторых случаях это можно считать правильным!

Резюме

Конечно, есть и другие способы реализации правильного решения, чем тот, который приведен здесь, но следует принять во внимание список неправильных ответов (и много других необоснованных примеров, которые я здесь не рассматриваю), и любые инновации или альтернативные вычисления должны быть тщательно протестирован и сравнен с тем, который уже работает.

В Oracle вы можете сделать это так,

Если день рождения 29 февраля и 1 марта считается днем рождения, если год не високосный, вы можете использовать запрос ниже,

Источник

Как рассчитать возраст в T-SQL с годами, месяцами и днями

каков был бы лучший способ рассчитать чей-то возраст в годах, месяцах и днях в T-SQL (SQL Server 2000)?

на datediff функция не обрабатывает границы года хорошо, плюс получение месяцев и дней отдельно будет медведем. Я знаю, что могу сделать это на стороне клиента относительно легко, но я хотел бы, чтобы это было сделано в моем хранимая процедура.

22 ответов

вот некоторый T-SQL, который дает вам количество лет, месяцев и дней со дня, указанного в @date. Он учитывает тот факт, что DATEDIFF() вычисляет разницу, не учитывая, какой это месяц или день (таким образом, месяц diff между 8/31 и 9/1 равен 1 месяцу), и обрабатывает это с помощью оператора case, который уменьшает результат, когда это необходимо.

в основном » DateDiff( год. «, дает вам возраст, который человек превратится в этом году, поэтому я просто добавлю заявление о случае, чтобы сказать, если у них еще не было дня рождения в этом году, а затем вычесть 1 год, иначе верните значение.

простой способ узнать возраст как текст, как показано ниже:

формат результатов будет:

вот (немного) более простая версия:

то же самое, что и функция.

реализовано арифметикой с датой в формате ISO.

Тесты

подход дней отличается от принятого ответа, различия показаны в комментариях ниже:

краткая версия дней по делу заявление:

если вы хотите возраст лет и месяцев только, это может быть проще

Примечание: очень полезная ссылка форматы даты SQL Server

Я видел вопрос несколько раз с результатами, выводящими годы, месяц, дни, но никогда не числовой / десятичный результат. (По крайней мере, не тот, который не вращается неправильно). Я приветствую отзывы об этой функции. Возможно, не нужно еще немного приспосабливаться.

— Примечание:выход не обрабатывает если разница больше 999.9999

— 3) (остальное). Разница в годах и некотором количестве дней. (1.5000, 2.3333, 7.6667, ect.)

довольно старый вопрос, но я хочу поделиться тем, что я сделал для расчета возраста

вы пытаетесь вычислить общее количество дней/месяцев / лет возраста? у тебя есть дата начала? Или вы пытаетесь рассечь его (например: 24 года, 1 месяц, 29 дней)?

если у вас есть дата начала, с которой вы работаете, datediff выведет общее количество дней/месяцев / лет со следующими командами:

с соответствующими выходами (8827/290/24).

вот код SQL, который дает вам количество лет, месяцев и дней с момента sysdate. Введите значение для input_birth_date этого формата (dd_mon_yy). Примечание: введите то же значение (дата рождения) для лет, месяцев и дней, таких как 01-mar-85

DateTime значения в T-SQL хранятся в виде поплавков. Вы можете просто вычесть даты друг от друга, и теперь у вас есть новая дата, которая является промежутком времени между ними.

Источник

Расчет возраста от дня рождения-TSQL, Oracle и любых других

Я часто вижу людей, которые предполагают, что DATEDIFF(YEAR, date_of_birth, GETDATE()) будет производить текущий возраст человека.

То есть в случае параметра YEAR DATEDIFF подсчитывает количество пересеченных 1 января. С параметром MONTH он будет считать количество пересеченных 1st месяца.

Так, например, ребенку, родившемуся на 31-Dec-17, уже будет «1 год», когда на самом деле ему не исполнится 1 год до 31-Dec-18, а в настоящее время ему 0 лет.

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

Итак, мой вопрос заключается в следующем: каково самое простое выражение, которое, учитывая дату рождения человека и исходную дату, вычисляет возраст человека на эту исходную дату?

Я ищу ответ в следующих терминах:

Ответ должен быть встроенным выражением, способным быть выбранным или включенным в предложение where.

Для тех, у кого дни рождения приходятся на 29 февраля, он должен рассматривать их возраст как увеличивающийся на 29 февраля, если базовый год является високосным, или он должен рассматривать их возраст как увеличивающийся на 1 марта, если базовый год не является високосным.

EDIT: я ценю ответы, которые были даны, и ссылки на предыдущие вопросы. Теперь этот вопрос помечен как дубликат.

Я также попросил ответ, который в идеале правильно обрабатывает «negative ages» каким-то образом (где контрольная дата находится перед датой рождения), а связанные ответы-нет. Поэтому, хотя мой вопрос относится к одному и тому же предмету, он не является дубликатом, поскольку я наложил несколько дополнительных ограничений, которые не присутствуют в этом вопросе и которые аннулировали бы (так или иначе) все ответы, данные на этот старый вопрос.

Честно говоря, учитывая, как много тонко неправильных ответов изобилует (как я упоминал выше в своем первом абзаце), я бы подумал, что этот вопрос получит больше голосов и больше интереса, а не нисходящий голос и 3 голоса для закрытия.

4 ответа

Как сохранить поле DOB закрытым от других, если оно используется для отображения возраста пользователей? Например, как поле дня рождения stackoverflow хранится в секрете от других пользователей? Когда изменяется возраст поля отображения? Меняется ли он только первого числа каждого месяца или.

Таким образом, этот вопрос, по-видимому, задается в различных формах на занятиях по программированию. Я видел, как это спрашивали с триггерами, функциями и тому подобным. Я вычислил часть программы високосного года, и есть несколько различных способов вычислить возраст от вашего дня рождения, будь.

в Oracle вы можете сделать это так,

если день рождения-29 февраля, а 1 марта считается днем рождения, если год не является високосным, вы можете использовать запрос ниже,

Правильный ответ

Составленный из приведенных источников, это правильный ответ для SQL Server (с 2012 года) :

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

Неправильные ответы

Я просто подумал, что мне понадобится минутка, чтобы рассмотреть неправильные ответы в различных источниках, в интересах любых будущих читателей.

Как уже упоминалось в моем вопросе, это, по-видимому, первый подход, который многие пытаются использовать. К сожалению, он учитывает только разницу в части года даты, так что ребенку, родившемуся 31-Dec-17, исполняется 1 год на 01-Jan-18. Это хорошо, но это неправильно.

Дальнейшее уточнение делителя «days per year» после десятичной точки не поможет, так как в этом случае любой делитель выше 365 точно потерпит неудачу. Это хорошо, но это неправильно.

Вариант (2) заключается в использовании часов вместо дней. В каждом дне есть фиксированное количество часов, поэтому 8766/24 = 365.25. Мы видим, что это решение эквивалентно (2). Это хорошо, но это неправильно.

Другие исследовали, может ли DAYOFYEAR обеспечить решение. К сожалению, из-за високосных лет стандартный DAYOFYEAR не соответствует определенным датам (месяцам и месяцам) года. Это хорошо, но это неправильно.

Возможно, ответ

Это Oracle-специфичное решение падает, когда датой рождения является 29 февраля (в високосный год), а контрольной датой-28 февраля (в невисокосный год), поскольку оно рассматривает день рождения как 28 февраля в невисокосные годы.

Это на самом деле может быть ближе к общей конвенции о том, когда день рождения празднуется для детей високосного года, но я уточнил в своем вопросе, что в таких случаях день рождения для целей расчета возраста человека должен рассматриваться как 1 марта (что соответствует закону UK).

У MONTHS_BETWEEN также есть другие причуды, которые могут быть нежелательны для расчета возраста (например, если он используется для расчета возраста как числа месяцев, например, для детей младше 1 года, когда «birthday» приходится на один и тот же день месяца или после него в последующие месяцы).

Это хорошо, и это может считаться правильным в некоторых контекстах!

Резюме

Конечно, есть и другие способы реализации правильного решения, кроме приведенного здесь, но следует обратить внимание на множество неправильных ответов (и многие другие чрезмерные примеры, которые я здесь не рассматриваю), и любое нововведение или альтернативный расчет должны быть тщательно проверены и сопоставлены с тем, который уже известен как работающий.

Как обновить столбец возраста, если столбец возраста null основан на столбце даты рождения в oracle? таблица t1: (исходная таблица) Name dob age aaa 12-JUN-1985 bbb 15-MAY-1991 ccc 23-AUG-2000 Целевая таблица, как это: Name dob age aaa 12-JUN-1985 28 bbb 15-MAY-1991 22 ccc 23-AUG-2000 13

Как я могу вычислить дату рождения из заданного возраста, используя javascript. пример: Я вхожу в свой возраст как 23 года 1 месяц 26 дней. тогда мне нужно получить дату рождения как 1995-05-30. как это можно сделать.

Похожие вопросы:

Мне нужно вычислить дату рождения человека на основе текущего дня при вводе в качестве текущего возраста в скрипте java. Я обыскал его, но ничего не нашел. Мне нужно получить дату рождения человека.

Как сохранить поле DOB закрытым от других, если оно используется для отображения возраста пользователей? Например, как поле дня рождения stackoverflow хранится в секрете от других пользователей.

Таким образом, этот вопрос, по-видимому, задается в различных формах на занятиях по программированию. Я видел, как это спрашивали с триггерами, функциями и тому подобным. Я вычислил часть программы.

Как обновить столбец возраста, если столбец возраста null основан на столбце даты рождения в oracle? таблица t1: (исходная таблица) Name dob age aaa 12-JUN-1985 bbb 15-MAY-1991 ccc 23-AUG-2000.

Как я могу вычислить дату рождения из заданного возраста, используя javascript. пример: Я вхожу в свой возраст как 23 года 1 месяц 26 дней. тогда мне нужно получить дату рождения как 1995-05-30. как.

Я ищу хороший алгоритм, предпочтительно используя тип CLR DateTime и другие встроенные вещи, а не просто используя математику on-the-metal для угадывания даты дня рождения с учетом возраста. Дата.

У меня есть данные, которые выглядят примерно так. Это dataframe, содержащий дату рождения (среди другой информации) для ряда людей. library(tidyr) library(dplyr) library(magrittr).

Я хочу рассчитать возраст от дня,месяца и Year.I уже сделанной даты рождения до расчета дня,месяца,года. Но мне нужен обратный расчет возраста Если пользователь вводит возраст : Day:18 Month:05.

Источник

Вычисляем возраст согласно дате в MySQL

Если перед вами встанет задача вычисления возраста пользователя по дате его рождения непосредственно в MySQL, то в данной статье вы найдёте готовое решение.

В недрах сети было найдено решение. Мы его немного подлатали, убрали избыточные конвертации и обернули в функцию, которую можно использовать в дальнейшем.

На первый взгляд немного мудрёное решение, однако если его опробовать, то результат будет чёткий и точный. Принцип таков: вычитаем текущий год из года рождения пользователя; если текущий день и месяц меньше даты рождения пользователя отнимаем ещё год.

Использовать данную функцию можно следующим образом.

Вот и всё! Данные типа DATE превращаются в возраст.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: http://codingexplained.com/databases/mysql/calculate-age-from-date-of-birth-in-mysql
Перевел: Станислав Протасевич
Урок создан: 30 Апреля 2015
Просмотров: 8361
Правила перепечатки

5 последних уроков рубрики «Разное»

Как выбрать хороший хостинг для своего сайта?

Выбрать хороший хостинг для своего сайта достаточно сложная задача. Особенно сейчас, когда на рынке услуг хостинга действует несколько сотен игроков с очень привлекательными предложениями. Хорошим вариантом является лидер рейтинга Хостинг Ниндзя — Макхост.

Проект готов, Все проверено на локальном сервере OpenServer и можно переносить сайт на хостинг. Вот только какую компанию выбрать? Предлагаю рассмотреть хостинг fornex.com. Отличное место для твоего проекта с перспективами бурного роста.

oracle возраст по дате рождения. Смотреть фото oracle возраст по дате рождения. Смотреть картинку oracle возраст по дате рождения. Картинка про oracle возраст по дате рождения. Фото oracle возраст по дате рождения

Разработка веб-сайтов с помощью онлайн платформы Wrike

oracle возраст по дате рождения. Смотреть фото oracle возраст по дате рождения. Смотреть картинку oracle возраст по дате рождения. Картинка про oracle возраст по дате рождения. Фото oracle возраст по дате рождения

20 ресурсов для прототипирования

Подборка из нескольких десятков ресурсов для создания мокапов и прототипов.

oracle возраст по дате рождения. Смотреть фото oracle возраст по дате рождения. Смотреть картинку oracle возраст по дате рождения. Картинка про oracle возраст по дате рождения. Фото oracle возраст по дате рождения

Топ 10 бесплатных хостингов

Небольшая подборка провайдеров бесплатного хостинга с подробным описанием.

Источник

Вычислить возраст в MySQL (InnoDb)

Если у меня есть лица дата рождения хранится в таблице в виде dd-mm-yyyy и я вычитаю его из текущей даты, в каком формате возвращается дата?

Как я могу использовать этот возвращенный формат для вычисления чьего-то возраста?

13 ответов:

Если значение хранится в виде типа данных DATETIME:

менее точно, когда вы рассматриваете високосные годы:

таким образом, вы рассматриваете даже месяц и день рождения, чтобы иметь более точный расчет возраста.

простой, но элегантный..

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

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

свободно адаптировано из здесь

Это как вычислить возраст в MySQL:

вы можете сделать функцию, чтобы сделать это:

Теперь вы можете получить возраст от дата:

Если ваша дата находится в формате Y-m-d H:i:s, Вы можете сделать это:

вы можете использовать эту функцию в любом месте 😉

Я предпочитаю использовать функцию таким образом.

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

есть два простых способа сделать это:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *