MySQL (Simple)Mask Function

ถ้าวันนึงเกิดจำเป็นจริง ๆ ต้องจัดรูปแบบการแสดงผลข้อมูลในฐานข้อมูลขึ้นมาเช่น หมายเลขโทรศัพท์ เลขประจำตัวประชาชน หรือจัดรูปแบบตัวเลขในแบบอื่น ๆ โดยปกติแล้ว MySQL มีฟังก์ชั่นที่เกี่ยวข้องกับรูปแบบการแสดงผลอยู่ไม่กี่ตัว เช่นพวกตัวเลข(เงิน) วันที่ ซึ่งก็มีแค่นั้นแหล่ะ ^_^

** ส่วนตัวแล้วไม่แนะนำให้ใช้ (แล้วเขียนขึ้นมาทำไมฟระ 5555) คือถ้าจะใช้ก็มีให้ใช้ได้แต่ไม่แนะนำไง เป็นภาระการประมวลผลโดยใช่เหตุ ปล่อยให้เป็นหน้าที่ของฟรอนท์ไปหล่ะกัน
DELIMITER $$
DROP FUNCTION IF EXISTS SIMPLEMASK$$

CREATE FUNCTION SIMPLEMASK (
    xvalue VARCHAR(32), 
    xformat VARCHAR(32)
)
RETURNS CHAR(32) 
DETERMINISTIC
BEGIN

    DECLARE input_len TINYINT;
    DECLARE tc CHAR;
    DECLARE idx TINYINT;
    DECLARE yformat VARCHAR(32);
    DECLARE posinsert TINYINT;
    DECLARE newstring VARCHAR(32);
    
    # Initialize variables
    SET yformat = REPLACE(xformat, '#', '');
    SET input_len = LENGTH(yformat);
    SET idx = 1;
    SET posinsert = 0;
    
    # Construct formated string
    WHILE ( idx <= input_len ) DO
        SET tc = SUBSTR(yformat, idx, 1);
        SET posinsert = LOCATE(tc, xformat, (idx + posinsert));
        SET newstring = CONCAT(tc, SUBSTR(xvalue, posinsert, 1));
        SET xvalue = INSERT(xvalue, posinsert, 1, newstring);
        SET idx = idx + 1;
    END WHILE;
    
    RETURN xvalue;
    
END $$

DELIMITER ;

-- Test
SELECT SIMPLEMASK(1234567890123,'#-####-#####-##-#'); -- CID/1-2345-67890-12-3

ป.ล.