2016-06-08 5 views
0

У нас есть таблица, в которой мы используем столбец для хранения цены товара. Размер столбца равен 17.2. Нам нужно иметь как разделитель, так и десятичный разделитель в строке. В настоящее время мы используем это:Thousand separator to большое количество в SQL Server 2005

SELECT '$' + convert(varchar,cast('2123232322323.21' as money),-1) as Price 

Но это приводит к ошибке, если размер превышает 15 цифр.

+0

sql server 2005 –

+0

работает отлично для меня. – Lamak

+0

попробуйте этот SELECT '$' + convert (varchar, cast ('212323232232123.21' в качестве денег), - 1) as Цена –

ответ

0

Тип money не имеет достаточного диапазона для чисел, используемых OP. в идеале такого рода вещи будут выполняться на уровне презентации, но OP хочет получить SQL-решение, поэтому я пошел на решение TSQL. Кто-то с лучшим TSQL, чем я, может улучшить это, но я верю, что он сделает то, что хочет OP. В идеале это было бы сделано в более общую функцию User Defined. Он не учитывает локали (некоторые европейские страны используют «.» Как разделитель тысяч и «,» как десятичную точку).

DECLARE @Price decimal(19,2) 
DECLARE @PriceString varchar(20) 
DECLARE @DP int 
DECLARE @Decimals varchar(3) 
DECLARE @ResultString varchar(25) 

SELECT @Price = 123456789.89 
SELECT @PriceString = CONVERT(varchar(20), @Price) 
SELECT @DP = CHARINDEX('.', @PriceString) 
SELECT @Decimals = SUBSTRING(@PriceString, @DP, LEN(@PriceString)[email protected]+1) 
SELECT @PriceString = SUBSTRING(@PriceString, 1, @DP-1) 
SELECT @PriceString = REVERSE(@PriceString) 
DECLARE @ix int 
SELECT @ResultString = '' 
SELECT @ix = 1 
WHILE @ix <= LEN(@PriceString) 
BEGIN 
    SELECT @ResultString = SUBSTRING(@PriceString, @ix, 1) + @ResultString 
    if @ix %3 = 0 AND @ix <> LEN(@PriceString) 
    BEGIN 
     SELECT @ResultString = ',' + @ResultString 

    END 
    SELECT @ix = @ix +1 
END 
SELECT @ResultString = @ResultString + @Decimals 
SELECT @ResultString 
Смежные вопросы