[sql-server] T-SQL에서 쉼표로 숫자를 어떻게 형식화합니까?

sp_spaceused데이터베이스에서 일부 테이블의 데이터 / 인덱스 공간 비율을 확인하기 위해 일부 관리 쿼리를 실행 하고 SQL Server 2008에서 결과를 컴파일 하고 있습니다. 물론 나는 결과에 많은 종류의 숫자를 얻었고 내 눈은 광택을 내기 시작했습니다. 모든 숫자를 쉼표로 형식화 할 수 있다면 정말 편리합니다 (987654321은 987,654,321이됩니다). 수년 동안 SQL Server를 사용해 왔지만 프레젠테이션 레이어에서 대부분의 시간을 포맷 한 이후로이 문제가 발생하지 않았지만이 경우 SSMS의 T-SQL 결과 프레젠테이션입니다.

나는 이것을 해결하기 위해 간단한 CLR UDF를 만드는 것을 고려했지만, 평범한 오래된 T-SQL에서는 이것이 가능 해야하는 것처럼 보입니다. 그래서 여기에 질문을 제기 할 것입니다-바닐라 T-SQL에서 숫자 서식을 어떻게 사용합니까?



답변

SQL Server 2012 이상에서는 숫자가 쉼표로 형식화됩니다.

select format([Number], 'N0')

0원하는 소수점 이하 자릿수로 변경할 수도 있습니다 .


답변

프레젠테이션 계층에서 형식화를 수행해야한다고 말하는 OP를 포함한 모든 사람에게 동의하지만이 형식화는로 money변환 한 다음로 변환하여 T-SQL에서 수행 할 수 있습니다 varchar. 그러나 여기에는로 끝나는 후행 소수점이 포함됩니다 SUBSTRING.

SELECT CONVERT(varchar, CAST(987654321 AS money), 1)


답변

문자열 길이 문제를 피하기 위해 Substring 대신 Replace를 권장합니다.

REPLACE(CONVERT(varchar(20), (CAST(SUM(table.value) AS money)), 1), '.00', '')


답변

SQL Server 2012+ 구현의 경우 FORMAT 을 사용하여 문자열 형식이 아닌 데이터 형식에 문자열 형식을 적용 할 수 있습니다.

원래 질문에서 사용자는 쉼표를 수천 구분 기호로 사용하는 기능을 요청했습니다. A의 중복 문제로 폐쇄 , 사용자들은 통화 서식을 적용 할 수있는 방법을 물어 봤다. 다음 쿼리는 두 작업을 모두 수행하는 방법을 보여줍니다. 또한이 솔루션을보다 일반적인 솔루션으로 만들기 위해 문화를 적용하는 방법을 보여줍니다 (그리스 특수 형식을 적용하는 Tsiridis Dimitris의 기능 다루기).

-- FORMAT
-- http://msdn.microsoft.com/en-us/library/hh213505(v=sql.110).aspx
-- FORMAT does not do conversion, that's the domain of cast/convert/parse etc
-- Only accepts numeric and date/time data types for formatting. 
--
-- Formatting Types
-- http://msdn.microsoft.com/en-us/library/26etazsy.aspx

-- Standard numeric format strings
-- http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx
SELECT
    -- c => currency
    -- n => numeric
    FORMAT(987654321, N'N', C.culture) AS some_number
,   FORMAT(987654321, N'c', C.culture) AS some_currency
,   C.culture
FROM
    (
        -- Language culture names
        -- http://msdn.microsoft.com/en-us/library/ee825488(v=cs.20).aspx
        VALUES
            ('en-US')
        ,   ('en-GB')
        ,   ('ja-JP')
        ,   ('Ro-RO')
        ,   ('el-GR')
    ) C (culture);

위의 SQLFiddle


답변

데모 1

쉼표 추가를 보여줍니다.

PRINT FORMATMESSAGE('The number is: %s', format(5000000, '#,##0'))
-- Output
The number is: 5,000,000

데모 2

쉼표와 소수점을 보여줍니다. 필요한 경우 마지막 숫자를 반올림하십시오.

PRINT FORMATMESSAGE('The number is: %s', format(5000000.759145678, '#,##0.00'))
-- Output
The number is: 5,000,000.76

적합성

SQL Server 2012+.


답변

아래 쿼리로 시도하십시오 :

SELECT FORMAT(987654321,'#,###,##0')

오른쪽 소수점 형식 :

SELECT FORMAT(987654321,'#,###,##0.###\,###')


답변

SELECT REPLACE(CONVERT(varchar(20), (CAST(9876543 AS money)), 1), '.00', '')

출력 = 9,876,543

9876543을 열 이름으로 바꿀 수 있습니다.