<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: MySQL Date Age Calculation</title>
	<atom:link href="http://www.jefferyfernandez.id.au/2008/07/02/mysql-date-age-calculation/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jefferyfernandez.id.au/2008/07/02/mysql-date-age-calculation/</link>
	<description>between flat screens and grey matter</description>
	<lastBuildDate>Wed, 13 Jul 2011 06:33:18 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3-aortic-dissection</generator>
	<item>
		<title>By: Allan</title>
		<link>http://www.jefferyfernandez.id.au/2008/07/02/mysql-date-age-calculation/comment-page-1/#comment-7792</link>
		<dc:creator>Allan</dc:creator>
		<pubDate>Wed, 29 Sep 2010 04:30:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.jefferyfernandez.id.au/?p=76#comment-7792</guid>
		<description>I had a similar requirement and started down the same path as your function when it occurred to me that I can simplify everything by add the datediff to 0000-00-00; however, since that not a legal date I had to use 0001-01-01 and subtract off 1 from each field.  See below:
&lt;pre lang=&quot;mysql&quot;&gt;
DELIMITER $$

DROP FUNCTION IF EXISTS Get_Age $$

CREATE FUNCTION Get_Age( dob DATE )
RETURNS CHAR(20)
BEGIN
    DECLARE years INT default 0;
    DECLARE months INT default 0;
    DECLARE days INT default 0;
    DECLARE age DATE;

    SELECT date_add(&#039;0001-01-01&#039;, interval datediff(current_date(),dob) day ) INTO age;

    -- Check that the age we&#039;re given is useful
    IF age is null or age = 0 or age = &#039;0000-00-00&#039; THEN
        RETURN age;
    END IF;

    SELECT YEAR(age) - 1 INTO years;
    SELECT MONTH(age)- 1 INTO months;
    SELECT DAY(age) - 1 INTO days;

    IF years THEN
        RETURN concat(years,&#039;y &#039;,months,&#039;m&#039;);

    ELSEIF months THEN
        RETURN concat(months,&#039;m &#039;,days,&#039;d&#039;);

    ELSE
            RETURN concat(days,&#039; days&#039;);
    END IF;

END $$

DELIMITER ;
&lt;/pre&gt;</description>
		<content:encoded><![CDATA[<p>I had a similar requirement and started down the same path as your function when it occurred to me that I can simplify everything by add the datediff to 0000-00-00; however, since that not a legal date I had to use 0001-01-01 and subtract off 1 from each field.  See below:</p>

<div class="wp_syntax"><div class="code"><pre class="mysql" style="font-family:monospace;">DELIMITER $$
&nbsp;
<span style="color: #990099; font-weight: bold;">DROP</span> <span style="color: #990099; font-weight: bold;">FUNCTION</span> <span style="color: #009900;">IF</span> <span style="color: #990099; font-weight: bold;">EXISTS</span> Get_Age $$
&nbsp;
<span style="color: #990099; font-weight: bold;">CREATE</span> <span style="color: #990099; font-weight: bold;">FUNCTION</span> Get_Age<span style="color: #FF00FF;">&#40;</span> dob <span style="color: #999900; font-weight: bold;">DATE</span> <span style="color: #FF00FF;">&#41;</span>
<span style="color: #990099; font-weight: bold;">RETURNS</span> <span style="color: #000099;">CHAR</span><span style="color: #FF00FF;">&#40;</span><span style="color: #008080;">20</span><span style="color: #FF00FF;">&#41;</span>
<span style="color: #990099; font-weight: bold;">BEGIN</span>
    <span style="color: #990099; font-weight: bold;">DECLARE</span> years <span style="color: #999900; font-weight: bold;">INT</span> <span style="color: #990099; font-weight: bold;">default</span> <span style="color: #008080;">0</span><span style="color: #000033;">;</span>
    <span style="color: #990099; font-weight: bold;">DECLARE</span> months <span style="color: #999900; font-weight: bold;">INT</span> <span style="color: #990099; font-weight: bold;">default</span> <span style="color: #008080;">0</span><span style="color: #000033;">;</span>
    <span style="color: #990099; font-weight: bold;">DECLARE</span> days <span style="color: #999900; font-weight: bold;">INT</span> <span style="color: #990099; font-weight: bold;">default</span> <span style="color: #008080;">0</span><span style="color: #000033;">;</span>
    <span style="color: #990099; font-weight: bold;">DECLARE</span> age <span style="color: #999900; font-weight: bold;">DATE</span><span style="color: #000033;">;</span>
&nbsp;
    <span style="color: #990099; font-weight: bold;">SELECT</span> <span style="color: #000099;">date_add</span><span style="color: #FF00FF;">&#40;</span><span style="color: #008000;">'0001-01-01'</span><span style="color: #000033;">,</span> <span style="color: #CC0099; font-weight: bold;">interval</span> <span style="color: #000099;">datediff</span><span style="color: #FF00FF;">&#40;</span><span style="color: #000099;">current_date</span><span style="color: #FF00FF;">&#40;</span><span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">,</span>dob<span style="color: #FF00FF;">&#41;</span> <span style="color: #9900FF; font-weight: bold;">day</span> <span style="color: #FF00FF;">&#41;</span> <span style="color: #990099; font-weight: bold;">INTO</span> age<span style="color: #000033;">;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">-- Check that the age we're given is useful</span>
    <span style="color: #009900;">IF</span> age <span style="color: #CC0099; font-weight: bold;">is</span> <span style="color: #9900FF; font-weight: bold;">null</span> <span style="color: #CC0099; font-weight: bold;">or</span> age <span style="color: #CC0099;">=</span> <span style="color: #008080;">0</span> <span style="color: #CC0099; font-weight: bold;">or</span> age <span style="color: #CC0099;">=</span> <span style="color: #008000;">'0000-00-00'</span> <span style="color: #009900;">THEN</span>
        RETURN age<span style="color: #000033;">;</span>
    <span style="color: #009900;">END</span> <span style="color: #009900;">IF</span><span style="color: #000033;">;</span>
&nbsp;
    <span style="color: #990099; font-weight: bold;">SELECT</span> <span style="color: #000099;">YEAR</span><span style="color: #FF00FF;">&#40;</span>age<span style="color: #FF00FF;">&#41;</span> <span style="color: #CC0099;">-</span> <span style="color: #008080;">1</span> <span style="color: #990099; font-weight: bold;">INTO</span> years<span style="color: #000033;">;</span>
    <span style="color: #990099; font-weight: bold;">SELECT</span> <span style="color: #000099;">MONTH</span><span style="color: #FF00FF;">&#40;</span>age<span style="color: #FF00FF;">&#41;</span><span style="color: #CC0099;">-</span> <span style="color: #008080;">1</span> <span style="color: #990099; font-weight: bold;">INTO</span> months<span style="color: #000033;">;</span>
    <span style="color: #990099; font-weight: bold;">SELECT</span> <span style="color: #000099;">DAY</span><span style="color: #FF00FF;">&#40;</span>age<span style="color: #FF00FF;">&#41;</span> <span style="color: #CC0099;">-</span> <span style="color: #008080;">1</span> <span style="color: #990099; font-weight: bold;">INTO</span> days<span style="color: #000033;">;</span>
&nbsp;
    <span style="color: #009900;">IF</span> years <span style="color: #009900;">THEN</span>
        RETURN <span style="color: #000099;">concat</span><span style="color: #FF00FF;">&#40;</span>years<span style="color: #000033;">,</span><span style="color: #008000;">'y '</span><span style="color: #000033;">,</span>months<span style="color: #000033;">,</span><span style="color: #008000;">'m'</span><span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">;</span>
&nbsp;
    ELSEIF months <span style="color: #009900;">THEN</span>
        RETURN <span style="color: #000099;">concat</span><span style="color: #FF00FF;">&#40;</span>months<span style="color: #000033;">,</span><span style="color: #008000;">'m '</span><span style="color: #000033;">,</span>days<span style="color: #000033;">,</span><span style="color: #008000;">'d'</span><span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">;</span>
&nbsp;
    <span style="color: #009900;">ELSE</span>
            RETURN <span style="color: #000099;">concat</span><span style="color: #FF00FF;">&#40;</span>days<span style="color: #000033;">,</span><span style="color: #008000;">' days'</span><span style="color: #FF00FF;">&#41;</span><span style="color: #000033;">;</span>
    <span style="color: #009900;">END</span> <span style="color: #009900;">IF</span><span style="color: #000033;">;</span>
&nbsp;
<span style="color: #009900;">END</span> $$
&nbsp;
DELIMITER <span style="color: #000033;">;</span></pre></div></div>

]]></content:encoded>
	</item>
</channel>
</rss>

