Skip to content

Instantly share code, notes, and snippets.

@SamAsEnd
Last active August 9, 2024 17:07
Show Gist options
  • Save SamAsEnd/accf078b42154ff6b8cd282be2747366 to your computer and use it in GitHub Desktop.
Save SamAsEnd/accf078b42154ff6b8cd282be2747366 to your computer and use it in GitHub Desktop.
DELIMITER $$
CREATE OR REPLACE FUNCTION ET__CALCULATE_R(IN date DATE)
RETURNS INT UNSIGNED
DETERMINISTIC
BEGIN
DECLARE jdn INT UNSIGNED;
SET jdn = TO_DAYS(date) + 1721060;
RETURN (jdn - 1723856) % 1461;
END;
CREATE OR REPLACE FUNCTION ET__CALCULATE_N(IN date DATE)
RETURNS INT UNSIGNED
DETERMINISTIC
BEGIN
DECLARE r INT UNSIGNED;
SET r = ET__CALCULATE_R(date);
RETURN (r % 365) + 365 * FLOOR(r / 1460);
END;
CREATE OR REPLACE FUNCTION ET_DAYOFMONTH(IN date DATE)
RETURNS TINYINT UNSIGNED
DETERMINISTIC
BEGIN
RETURN (ET__CALCULATE_N(date) % 30) + 1;
END;
CREATE OR REPLACE FUNCTION ET_DAY(IN date DATE)
RETURNS TINYINT UNSIGNED
DETERMINISTIC
BEGIN
RETURN ET_DAYOFMONTH(date);
END;
CREATE OR REPLACE FUNCTION ET_DAYNAME(IN date DATE)
RETURNS VARCHAR(5)
DETERMINISTIC
BEGIN
CASE DAYOFWEEK(date)
WHEN 1 THEN RETURN 'እሑድ';
WHEN 2 THEN RETURN 'ሰኞ';
WHEN 3 THEN RETURN 'ማክሰኞ';
WHEN 4 THEN RETURN 'ረቡዕ';
WHEN 5 THEN RETURN 'ሐሙስ';
WHEN 6 THEN RETURN 'ዓርብ';
WHEN 7 THEN RETURN 'ቅዳሜ';
ELSE RETURN 'ባዶ';
END CASE;
END;
CREATE OR REPLACE FUNCTION ET_DAYOFYEAR(IN date DATE)
RETURNS SMALLINT UNSIGNED
DETERMINISTIC
BEGIN
DECLARE r INT UNSIGNED;
SET r = ET__CALCULATE_R(date);
RETURN (r % 365) + 365 * FLOOR(r / 1460) + 1;
END;
CREATE OR REPLACE FUNCTION ET_MONTH(IN date DATE)
RETURNS TINYINT UNSIGNED
DETERMINISTIC
BEGIN
RETURN FLOOR(ET__CALCULATE_N(date) / 30) + 1;
END;
CREATE OR REPLACE FUNCTION ET_QUARTER(IN date DATE)
RETURNS TINYINT UNSIGNED
DETERMINISTIC
BEGIN
CASE ET_MONTH(date)
WHEN 1 THEN RETURN 1;
WHEN 2 THEN RETURN 1;
WHEN 3 THEN RETURN 1;
WHEN 4 THEN RETURN 2;
WHEN 5 THEN RETURN 2;
WHEN 6 THEN RETURN 2;
WHEN 7 THEN RETURN 3;
WHEN 8 THEN RETURN 3;
WHEN 9 THEN RETURN 3;
WHEN 10 THEN RETURN 4;
WHEN 11 THEN RETURN 4;
WHEN 12 THEN RETURN 4;
WHEN 13 THEN RETURN 4;
ELSE RETURN 0;
END CASE;
END;
CREATE OR REPLACE FUNCTION ET_FISCAL_QUARTER(IN date DATE)
RETURNS TINYINT UNSIGNED
DETERMINISTIC
BEGIN
CASE ET_MONTH(date)
WHEN 1 THEN RETURN 1;
WHEN 2 THEN RETURN 2;
WHEN 3 THEN RETURN 2;
WHEN 4 THEN RETURN 2;
WHEN 5 THEN RETURN 3;
WHEN 6 THEN RETURN 3;
WHEN 7 THEN RETURN 3;
WHEN 8 THEN RETURN 4;
WHEN 9 THEN RETURN 4;
WHEN 10 THEN RETURN 4;
WHEN 11 THEN RETURN 1;
WHEN 12 THEN RETURN 1;
WHEN 13 THEN RETURN 1;
ELSE RETURN 0;
END CASE;
END;
CREATE OR REPLACE FUNCTION ET_MONTHNAME(IN date DATE)
RETURNS VARCHAR(5)
DETERMINISTIC
BEGIN
CASE ET_MONTH(date)
WHEN 1 THEN RETURN 'መስከረም';
WHEN 2 THEN RETURN 'ጥቅምት';
WHEN 3 THEN RETURN 'ኅዳር';
WHEN 4 THEN RETURN 'ታኅሣሥ';
WHEN 5 THEN RETURN 'ጥር';
WHEN 6 THEN RETURN 'የካቲት';
WHEN 7 THEN RETURN 'መጋቢት';
WHEN 8 THEN RETURN 'ሚያዝያ';
WHEN 9 THEN RETURN 'ግንቦት';
WHEN 10 THEN RETURN 'ሰኔ';
WHEN 11 THEN RETURN 'ሐምሌ';
WHEN 12 THEN RETURN 'ነሐሴ';
WHEN 13 THEN RETURN 'ጳጉሜን';
ELSE RETURN 'ባዶ';
END CASE;
END;
CREATE OR REPLACE FUNCTION ET_YEAR(IN date DATE)
RETURNS SMALLINT UNSIGNED
DETERMINISTIC
BEGIN
DECLARE r INT UNSIGNED;
SET r = ET__CALCULATE_R(date);
RETURN 4 * FLOOR((TO_DAYS(date) - 2796) / 1461) + FLOOR(r / 365) - FLOOR(r / 1460);
END;
CREATE OR REPLACE FUNCTION ET_FISCAL_YEAR(IN date DATE)
RETURNS SMALLINT UNSIGNED
DETERMINISTIC
BEGIN
DECLARE year SMALLINT UNSIGNED;
SET year = ET_YEAR(date);
CASE ET_MONTH(date)
WHEN 1 THEN RETURN year;
WHEN 2 THEN RETURN year;
WHEN 3 THEN RETURN year;
WHEN 4 THEN RETURN year;
WHEN 5 THEN RETURN year;
WHEN 6 THEN RETURN year;
WHEN 7 THEN RETURN year;
WHEN 8 THEN RETURN year;
WHEN 9 THEN RETURN year;
WHEN 10 THEN RETURN year;
WHEN 11 THEN RETURN year + 1;
WHEN 12 THEN RETURN year + 1;
WHEN 13 THEN RETURN year + 1;
ELSE RETURN 0;
END CASE;
END;
CREATE OR REPLACE FUNCTION ET_DATE(IN date DATE)
RETURNS VARCHAR(10)
DETERMINISTIC
BEGIN
RETURN CONCAT(ET_YEAR(date), '-', LPAD(ET_MONTH(date), 2, '0'), '-', LPAD(ET_DAY(date), 2, '0'));
END;
CREATE OR REPLACE FUNCTION ET_IS_LEAP_YEAR(IN date DATE)
RETURNS BOOLEAN
DETERMINISTIC
BEGIN
RETURN (ET_YEAR(date) + 1) % 4 = 0;
END;
$$
DELIMITER ;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment