AD2BS CONVERTER MYSQL
DELIMITER $$
CREATE FUNCTION `ad2bs`(`english_date` VARCHAR(10)) RETURNS varchar(100) CHARSET utf8
READS SQL DATA
DETERMINISTIC
BEGIN
DECLARE firstday_en DATE DEFAULT '1918-04-13';
DECLARE start_ne INT DEFAULT 1975;
DECLARE end_ne INT DEFAULT 2095;
DECLARE days_diff INT;
DECLARE total_days INT;
DECLARE current_year INT;
DECLARE current_month INT;
DECLARE nepali_year INT;
DECLARE nepali_month INT;
DECLARE nepali_day INT;
DECLARE year_days INT;
DECLARE month_days INT;
DECLARE count_previous INT;
DECLARE days_remaining INT;
DECLARE result VARCHAR(100);
SET days_diff = DATEDIFF(STR_TO_DATE(english_date, '%Y-%m-%d'), firstday_en);
IF days_diff < 0 THEN
RETURN NULL; END IF;
SET total_days = 0;
SET current_year = start_ne;
SET nepali_year = start_ne;
SET nepali_month = 1;
SET nepali_day = 1;
year_loop: WHILE current_year <= end_ne DO
SELECT SUM(CAST(no_of_days AS UNSIGNED)) INTO year_days
FROM datelog
WHERE BS_Year = current_year;
IF (total_days + year_days) > days_diff THEN
SET nepali_year = current_year;
SET count_previous = total_days;
SET current_month = 1;
month_loop: WHILE current_month <= 12 DO
SELECT CAST(no_of_days AS UNSIGNED) INTO month_days
FROM datelog
WHERE BS_Year = nepali_year AND BS_Month = current_month;
IF (count_previous + month_days) > days_diff THEN
SET nepali_month = current_month;
SET days_remaining = days_diff - count_previous;
SET nepali_day = days_remaining + 1;
LEAVE year_loop;
ELSEIF (count_previous + month_days) = days_diff THEN
SET nepali_year = current_year;
SET nepali_month = current_month + 1;
IF nepali_month > 12 THEN
SET nepali_year = current_year + 1;
SET nepali_month = 1;
END IF;
SET nepali_day = 1;
LEAVE year_loop;
END IF;
SET count_previous = count_previous + month_days;
SET current_month = current_month + 1;
END WHILE month_loop;
LEAVE year_loop;
ELSEIF (total_days + year_days) = days_diff THEN
SET nepali_year = current_year + 1;
SET nepali_month = 1;
SET nepali_day = 1;
LEAVE year_loop;
END IF;
SET total_days = total_days + year_days;
SET current_year = current_year + 1;
END WHILE year_loop;
SET result = CONCAT(
LPAD(nepali_year, 4, '0'),
'-',
LPAD(nepali_month, 2, '0'),
'-',
LPAD(nepali_day, 2, '0')
);
RETURN result;
END$$
DELIMITER ;
