Loading
September 2, 2026

Gyaneshwor Gaud

Programmer

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 ;

Leave a Reply

Your email address will not be published. Required fields are marked *