Recently I saw a MySQL Stored Function requirement on Experts-Exchange for converting date into some specific words format.

You may find MySQL function for date to words conversion online; even udfs might be ready, but I decided to write my own.

I wrote this simple function mainly based on SELECT CASE to convert dates in to words as follows:

mysql>SELECT date_to_words(‘2010-05-08’);

Eighth Day of May Two Thousand Ten

Download sql file below the code.

DELIMITER $$

DROP FUNCTION IF EXISTS `date_to_words` $$

CREATE FUNCTION `date_to_words` (mydate DATE) RETURNS VARCHAR(100)

DETERMINISTIC

BEGIN

/* Converts date into words */

DECLARE yr INT;

DECLARE dateval INT;

DECLARE thousand INT;

DECLARE hundred INT;

DECLARE tens INT;

DECLARE tensword VARCHAR(10);

DECLARE onesword VARCHAR(10);

DECLARE thousandsword VARCHAR(20);

DECLARE hundredsword VARCHAR(20);

DECLARE datevalsword VARCHAR(20);

SET yr=year(mydate);

SET dateval=day(mydate);

/* DAY TO WORDS */

SELECT CASE dateval

WHEN 1 THEN ‘First’

WHEN 2 THEN ‘Second’

WHEN 3 THEN ‘Third’

WHEN 4 THEN ‘Fourth’

WHEN 5 THEN ‘Fifth’

WHEN 6 THEN ‘Sixth’

WHEN 7 THEN ‘Seventh’

WHEN 8 THEN ‘Eighth’

WHEN 9 THEN ‘Ninth’

WHEN 10 THEN ‘Tenth’

WHEN 11 THEN ‘Eleventh’

WHEN 12 THEN ‘Twelfth’

WHEN 13 THEN ‘Thirteenth’

WHEN 14 THEN ‘Fourteenth’

WHEN 15 THEN ‘Fifteenth’

WHEN 16 THEN ‘Sixteenth’

WHEN 17 THEN ‘Seventeenth’

WHEN 18 THEN ‘Eighteenth’

WHEN 19 THEN ‘Nineteenth’

WHEN 20 THEN ‘Twentieth’

WHEN 21 THEN ‘Twenty-first’

WHEN 22 THEN ‘Twenty-second’

WHEN 23 THEN ‘Twenty-third’

WHEN 24 THEN ‘Twenty-fourth’

WHEN 25 THEN ‘Twenty-fifth’

WHEN 26 THEN ‘Twenty-sixth’

WHEN 27 THEN ‘Twenty-seventh’

WHEN 28 THEN ‘Twenty-eighth’

WHEN 29 THEN ‘Twenty-ninth’

WHEN 30 THEN ‘Thirtieth’

WHEN 31 THEN ‘Thirty-first’

END into datevalsword;

/* YEAR TO WORDS */

set thousand=floor(yr/1000) ;

set yr = yr – thousand * 1000;

set hundred = floor(yr / 100);

set yr = yr – hundred * 100;

IF (yr > 19) THEN

set tens = floor(yr / 10);

set yr = yr mod 10;

ELSE

set tens=0;

END IF;

SELECT CASE thousand

WHEN 1 THEN ‘One’

WHEN 2 THEN ‘Two’

WHEN 3 THEN ‘Three’

WHEN 4 THEN ‘Four’

WHEN 5 THEN ‘Five’

WHEN 6 THEN ‘Six’

WHEN 7 THEN ‘Seven’

WHEN 8 THEN ‘Eight’

WHEN 9 THEN ‘Nine’

END INTO thousandsword;

SET thousandsword=concat(thousandsword,’ Thousand ‘);

SELECT CASE hundred

WHEN 0 then ”

WHEN 1 THEN ‘One’

WHEN 2 THEN ‘Two’

WHEN 3 THEN ‘Three’

WHEN 4 THEN ‘Four’

WHEN 5 THEN ‘Five’

WHEN 6 THEN ‘Six’

WHEN 7 THEN ‘Seven’

WHEN 8 THEN ‘Eight’

WHEN 9 THEN ‘Nine’

END INTO hundredsword;

if (hundredsword<>”) then

SET hundredsword=concat(hundredsword,’ Hundred ‘) ;

else

set hundredsword=”;

end if;

/*TENS To WORDS*/

SELECT CASE tens

WHEN 2 THEN ‘Twenty’

WHEN 3 THEN ‘Thirty’

WHEN 4 THEN ‘Fourty’

WHEN 5 THEN ‘Fifty’

WHEN 6 THEN ‘Sixty’

WHEN 7 THEN ‘Seventy’

WHEN 8 THEN ‘Eigthy’

WHEN 9 THEN ‘Ninety’

ELSE ”

END INTO tensword;

/*ONES To WORDS*/

SELECT CASE yr

WHEN 0 THEN ”

WHEN 1 THEN ‘One’

WHEN 2 THEN ‘Two’

WHEN 3 THEN ‘Three’

WHEN 4 THEN ‘Four’

WHEN 5 THEN ‘Five’

WHEN 6 THEN ‘Six’

WHEN 7 THEN ‘Seven’

WHEN 8 THEN ‘Eight’

WHEN 9 THEN ‘Nine’

WHEN 10 THEN ‘Ten’

WHEN 11 THEN ‘Eleven’

WHEN 12 THEN ‘Twelve’

WHEN 13 THEN ‘Thirteen’

WHEN 14 THEN ‘Fourteen’

WHEN 15 THEN ‘Fifteen’

WHEN 16 THEN ‘Sixteen’

WHEN 17 THEN ‘Seventeen’

WHEN 18 THEN ‘Eighteen’

WHEN 19 THEN ‘Nineteen’

END into onesword;

return concat(datevalsword, ‘ Day of ‘, date_format(mydate,’%M’),’ ‘,thousandsword,hundredsword, tensword,’ ‘,onesword);

END $$

DELIMITER ;

**Download SQL Code** for converting date to words.date_to_words.sql