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을 열 이름으로 바꿀 수 있습니다.