DBMS/MySql (MariaDB)

MySQL/한글, 영문, 숫자, 특문 정렬방식

건담아빠 2021. 3. 17. 10:22

 

프로젝트에서 필요한 부분이 있어서, 샘플로 만들어 보았습니다.

 

WITH t_temp AS (
    SELECT  1 AS product_name
    UNION ALL
    SELECT  '&_@'
    UNION ALL
    SELECT  'B%#$'
    UNION ALL
    SELECT  'a%#$'
    UNION ALL
    SELECT  '^SA'
    UNION ALL
    SELECT  '남dsfa$%'
    UNION ALL
    SELECT  '강2f23bvc43'
    UNION ALL
    SELECT  '뷁2f23bvc43'
    UNION ALL
    SELECT  '뷁1f23bvc43'
    UNION ALL
    SELECT  '뷁11f23bvc43'
    UNION ALL
    SELECT  '뷁3f23bvc43'
)
SELECT  xxx.product_name,
            ASCII(SUBSTRING(xxx.product_name, 1)) AS ascii_product_name,
            (
                CASE
                    WHEN ASCII(SUBSTRING(xxx.product_name, 1)) BETWEEN 48 AND 57 THEN '숫자'
                    WHEN ASCII(SUBSTRING(xxx.product_name, 1)) > 127 THEN '한글'
                    WHEN (
                        (ASCII(SUBSTRING(xxx.product_name, 1)) BETWEEN 65 AND 90) OR
                        (ASCII(SUBSTRING(xxx.product_name, 1)) BETWEEN 97 AND 122)
                    ) THEN '영문'
                    WHEN ASCII(SUBSTRING(xxx.product_name, 1)) < 128 THEN '특문'
                    ELSE '기타'
                END
            ) AS ascii_sort,
            (
                CASE
                    WHEN SUBSTRING(xxx.product_name, 1) REGEXP '^[가-힣]+' THEN '한글'
                    WHEN SUBSTRING(xxx.product_name, 1) REGEXP '^[0-9]+' THEN '숫자'
                    WHEN SUBSTRING(xxx.product_name, 1) REGEXP '^[a-zA-Z]+' THEN '영문'
                    WHEN SUBSTRING(xxx.product_name, 1) REGEXP '^[`~!#$%^&*|\\\'\";:\/?]+' THEN '특문'
                    ELSE '기타'
                END
            ) AS regexp_sort
FROM     t_temp AS xxx
ORDER BY        ascii_sort,
                xxx.product_name
;