CREATE OR REPLACE FUNCTION dateToWords(the_date TIMESTAMP) RETURNS text AS $$ DECLARE _month INTEGER; _day INTEGER; _year INTEGER; _hour INTEGER; _minute INTEGER; _year_text TEXT; _hour_text TEXT; _day_text TEXT; _minute_text TEXT; _exact_time TEXT; _month_text TEXT; e TEXT; BEGIN _month = EXTRACT(MONTH FROM the_date); _day = EXTRACT(DAY FROM the_date); _year = EXTRACT(YEAR FROM the_date); _hour = EXTRACT(HOUR FROM the_date); _minute = EXTRACT(MINUTE FROM the_date); WITH Below20(Word, Id) AS ( VALUES ('Zero', 0), ('One', 1),( 'Two', 2 ), ( 'Three', 3), ( 'Four', 4 ), ( 'Five', 5 ), ( 'Six', 6 ), ( 'Seven', 7 ), ( 'Eight', 8), ( 'Nine', 9), ( 'Ten', 10), ( 'Eleven', 11 ), ( 'Twelve', 12 ), ( 'Thirteen', 13 ), ( 'Fourteen', 14), ( 'Fifteen', 15 ), ('Sixteen', 16 ), ( 'Seventeen', 17), ('Eighteen', 18 ), ( 'Nineteen', 19 ) ), Below100(Word, Id) AS ( VALUES ('Twenty', 2), ('Thirty', 3),('Forty', 4), ('Fifty', 5), ('Sixty', 6), ('Seventy', 7), ('Eighty', 8), ('Ninety', 9) )SELECT CASE WHEN (_year % 1000) BETWEEN 1 AND 19 THEN CONCAT( (Select Word FROM Below20 WHERE ID=_year / 1000), ' Thousand ', (Select Word FROM Below20 WHERE ID=_year % 1000) ) WHEN (_year % 1000) BETWEEN 20 AND 99 THEN CONCAT( (Select Word FROM Below20 WHERE ID=_year / 1000), ' Thousand ', (Select Word FROM Below20 WHERE ID=(_year % 1000) / 10), ' ', (Select Word FROM Below20 WHERE ID=(_year % 1000) / 10) ) WHEN (_year % 1000) BETWEEN 100 AND 999 THEN CASE WHEN (_year % 1000) % 100 BETWEEN 1 AND 19 THEN CONCAT( (Select Word FROM Below20 WHERE ID=_year / 1000), ' Thousand ', (Select Word FROM Below20 WHERE ID=(_year % 1000) / 100), ' Hundred ', (Select Word FROM Below20 WHERE ID=((_year % 1000) % 100)) ) WHEN (_year % 1000) % 100 BETWEEN 20 AND 99 THEN CONCAT( (Select Word FROM Below20 WHERE ID=_year / 1000), ' Thousand ', (Select Word FROM Below20 WHERE ID=(_year % 1000) / 100), ' Hundred ', (Select Word FROM Below100 WHERE ID=((_year % 1000) % 100) / 10), ' ', (Select Word FROM Below20 WHERE ID=((_year % 1000) % 100) % 10) ) END END INTO _year_text; WITH Below20(Word, Id) AS ( VALUES ('', 0), ('One', 1),( 'Two', 2 ), ( 'Three', 3), ( 'Four', 4 ), ( 'Five', 5 ), ( 'Six', 6 ), ( 'Seven', 7 ), ( 'Eight', 8), ( 'Nine', 9), ( 'Ten', 10), ( 'Eleven', 11 ), ( 'Twelve', 12 ) ) Select CASE WHEN _hour > 12 THEN (Select Word FROM Below20 WHERE ID= _hour - 12) ELSE (Select Word FROM Below20 WHERE ID= _hour) END INTO _hour_text; WITH Below20(Word, Id) AS ( VALUES ('', 0), ('First', 1),( 'Second', 2 ), ( 'Third', 3), ( 'Fourth', 4 ), ( 'Fifth', 5 ), ( 'Sixth', 6 ), ( 'Seventh', 7 ), ( 'Eighth', 8), ( 'Ninth', 9), ( 'Tenth', 10), ( 'Eleventh', 11 ), ( 'Twelfth', 12 ), ( 'Thirteenth', 13 ), ( 'Fourteenth', 14), ( 'Fifteenth', 15 ), ('Sixteenth', 16 ), ( 'Seventeenth', 17), ('Eighteenth', 18 ), ( 'Nineteenth', 19 ) ), Below100(Word, Id) AS ( VALUES ('Twenty', 2), ('Thirty', 3) ) Select CASE WHEN _day BETWEEN 1 AND 19 THEN (Select Word FROM Below20 WHERE ID=_day) ELSE CONCAT( (Select Word FROM Below100 WHERE ID= _day / 10), ' ', (Select Word FROM Below20 WHERE ID= _day % 10) ) END INTO _day_text; WITH Below20(Word, Id) AS ( VALUES ('', 0), ('One', 1),( 'Two', 2 ), ( 'Three', 3), ( 'Four', 4 ), ( 'Five', 5 ), ( 'Six', 6 ), ( 'Seven', 7 ), ( 'Eight', 8), ( 'Nine', 9), ( 'Ten', 10), ( 'Eleven', 11 ), ( 'Twelve', 12 ), ( 'Thirteen', 13 ), ( 'Fourteen', 14), ( 'Fifteen', 15 ), ('Sixteen', 16 ), ( 'Seventeen', 17), ('Eighteen', 18 ), ( 'Nineteen', 19 ) ), Below100(Word, Id) AS ( VALUES ('Twenty', 2), ('Thirty', 3),('Forty', 4), ('Fifty', 5), ('Sixty', 6) ) Select CASE WHEN _minute BETWEEN 1 AND 19 THEN (Select Word FROM Below20 WHERE ID=_day) ELSE CONCAT( (Select Word FROM Below100 WHERE ID= _minute / 10), ' ', (Select Word FROM Below20 WHERE ID= _minute % 10) ) END INTO _minute_text; SELECT CASE WHEN _hour BETWEEN 0 AND 12 THEN 'Morning' WHEN _hour BETWEEN 13 AND 17 THEN 'Afternoon' ELSE 'Evening' END INTO _exact_time; WITH nameOfTheMonth(monthAsText, Id) AS ( VALUES ('January', 1), ('February', 2),( 'MARCH', 3), ( 'April', 4), ( 'May', 5), ( 'June', 6), ( 'July', 7), ( 'August', 8), ( 'September', 9), ( 'October', 10), ( 'November', 11), ( 'December', 12) ) select monthAsText FROM nameOfTheMonth WHERE ID=_month INTO _month_text; SELECT CONCAT( _day_text, ' day of', ' ', _month_text,', ', _year_text,', ', _hour_text,' ', _minute_text, ' in the ', _exact_time) INTO e; return e; END; $$ LANGUAGE PLPGSQL; select dateToWords('May 15, 2018 5:38 PM')
Amount to Words Convert via PostgreSQL
asd
0 comments:
Post a Comment