Last active
August 9, 2024 17:07
-
-
Save SamAsEnd/accf078b42154ff6b8cd282be2747366 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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