MariaDB / 함수 / FORMAT / 숫자 세 자리마다 쉼표(콤마) 찍는 함수

MariaDB의 FORMAT(숫자, 소수_자릿수)은 숫자에 자릿수 구분 기호를 넣고 지정한 소수 자릿수로 반올림한 문자열을 반환합니다. 기본 표시는 1234567.89를 1,234,567.89처럼 바꾸며, 두 번째 인수가 0이면 소수 부분을 표시하지 않습니다. 계산·정렬에는 원래 숫자를 사용하고 FORMAT은 최종 표시 단계에 적용하세요.

기본 사용법과 소수 자릿수

MariaDB 서버에 접속할 수 있는 SQL 클라이언트에서 다음 SELECT를 실행합니다. 별도 테이블 없이 결과를 확인할 수 있습니다. number_value는 바꿀 숫자, decimal_places는 표시할 소수 자릿수, 선택적인 locale은 지역별 숫자 표기 규칙입니다. 문법은 FORMAT 공식 문서를 참고하세요.

SELECT FORMAT(123456789, 0) AS grouped,
       FORMAT(123456789, 2) AS padded,
       FORMAT(1234567.891, 2) AS rounded,
       FORMAT(-1234.567, 2) AS negative_value,
       FORMAT('123456789', 0) AS numeric_string;
결과 열 표시 결과
grouped 123,456,789
padded 123,456,789.00
rounded 1,234,567.89
negative_value -1,234.57
numeric_string 123,456,789

0은 쉼표 간격이 아니라 소수 자릿수입니다. 2를 지정하면 정수에도 .00을 붙이고, 더 많은 소수 자릿수는 반올림합니다. 단순히 소수 부분을 잘라 내는 함수로 이해하면 안 됩니다. 마지막 예제처럼 순수한 숫자 모양의 문자열은 변환되지만 모든 문자열이 올바른 숫자가 되는 것은 아닙니다.

지역별 구분 기호와 NULL

SELECT FORMAT(1234567.89, 2, 'en_US') AS en_us,
       FORMAT(1234567.89, 2, 'de_DE') AS de_de,
       FORMAT(NULL, 2) AS missing_value;

en_us는 1,234,567.89, de_de는 1.234.567,89입니다. 독일 표기에서는 그룹 구분 기호가 점, 소수점 기호가 쉼표이므로 “FORMAT은 언제나 쉼표를 넣는다”고 일반화하면 안 됩니다. 지역 이름의 언어·지역 표기는 MariaDB 로캘 목록을 참고하고, 실제 서버에서 필요한 숫자 표기를 확인하세요.

숫자 인수가 NULL이면 missing_value도 NULL입니다. NULL을 0.00으로 보일지는 별도의 데이터 표시 정책입니다. 값이 없다는 뜻을 실제 숫자 0과 혼동하지 않도록 원본 값과 화면 기본값을 구분해야 합니다.

FORMAT 문자열과 숫자 정렬·계산 분리

다음은 learning 실습 DB와 테이블 생성·입력·조회 권한이 있는 환경에서 한 번 실행합니다. 같은 이름의 테이블이 있으면 기존 자료를 삭제하지 말고 별도 실습 DB를 사용하세요. 실제 원본 숫자와 표시 문자열을 함께 조회합니다.

USE learning;
CREATE TABLE format_values_demo (
    amount DECIMAL(12,3) NULL
);
INSERT INTO format_values_demo (amount) VALUES
    (2), (10), (1000), (1234567.891), (NULL);
SELECT amount,
       FORMAT(amount, 2) AS displayed,
       ROUND(amount, 2) AS rounded_number
FROM format_values_demo
ORDER BY amount;

1234567.891 행에서 displayed는 1,234,567.89라는 문자열, rounded_number는 숫자 1234567.89입니다. 숫자의 반올림이 목적이면 ROUND(), 화면 표시가 목적이면 FORMAT을 구분합니다. 원본은 DECIMAL 같은 적절한 숫자형에 보관하고 구분 기호를 넣은 문자열로 덮어쓰지 않습니다.

SELECT FORMAT(amount, 2) AS displayed
FROM format_values_demo
WHERE amount IS NOT NULL
ORDER BY displayed;

SELECT FORMAT(amount, 2) AS displayed
FROM format_values_demo
WHERE amount IS NOT NULL
ORDER BY amount;

첫 조회는 문자열 정렬이므로 1,000.00 → 1,234,567.89 → 10.00 → 2.00 순서입니다. 두 번째 조회는 원래 숫자로 정렬하므로 2.00 → 10.00 → 1,000.00 → 1,234,567.89가 됩니다. 표시한 별칭만 보고 ORDER BY displayed를 선택하면 숫자 크기와 다른 결과를 얻을 수 있습니다.

합계·조건 비교도 숫자 열을 대상으로 수행하고 마지막 결과를 FORMAT으로 바꿉니다. 쉼표가 든 결과를 다시 숫자 계산에 넣으면 암시적 형 변환으로 뜻밖의 값이나 경고가 나올 수 있습니다. 표시 문자열은 숫자 원본의 대체 저장 형식이 아닙니다.

쉼표가 있는 입력을 다시 FORMAT에 넣지 않기

SELECT FORMAT('1,234.56', 2) AS wrong_input;
SHOW WARNINGS;

이 입력은 천 단위 쉼표가 있는 표시 문자열입니다. 검증한 MariaDB 12.3.3에서는 wrong_input이 1.00이 되고 잘못된 숫자 변환 경고가 발생했습니다. 숫자만으로 된 문자열을 처리하는 앞의 예제와 구분하세요. SQL 클라이언트에서 결과만 보고 정상으로 판단하지 말고 경고도 확인해야 합니다.

외부 입력은 기대하는 지역 표기와 허용 형식을 먼저 정해 검증하고 숫자 값으로 변환한 뒤 바인딩합니다. 쉼표를 무조건 제거하는 방식은 de_DE처럼 쉼표가 소수 기호인 입력에서 다른 숫자를 만들 수 있습니다. 앱이 이미 지역별 숫자 표시를 담당한다면 DB에서는 숫자를 그대로 반환하고 해당 표시 계층에서 포맷하는 편이 역할을 구분하기 쉽습니다.