asd
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')