redondeo de numeros SQL

19/09/2007 - 14:20 por Pedro | Informe spam
SQL server 2005
tengo una tabla temporal cuyo nombre de la tabla lo cargo en una variable:
@NombreTablaTemporal

la voy a exportar a txt.
Cargo las cabeceras de las columnas en el primer registro para mostrarlas en
el fichero.
Y convierto los distintos tipos de colunas a nvarchar ya que exporto a
texto, y poder controlar
los puntos de las columnas tipo money y sustituirlo por comas y mas cosas
En fin voy a mostrar como lo hago, lo entenderéis mejor y luego os pregunto
el problema que tengo:


SELECT @columnNames = COALESCE( @columnNames + ',', '') + column_name,
@columnConvert = COALESCE( @columnConvert + ',', '') +
case
when data_type in ('datetime', 'smalldatetime') then
'convert(nvarchar(4000),'+ column_name +',121'+') as '
when data_type in ('numeric', 'decimal') then
'replace(convert(nvarchar(4000),'+ column_name +',128'+ '), ''.'', '','') as '
when data_type in ('float', 'real', 'money', 'smallmoney') then
'replace(convert(nvarchar(4000),'+ column_name +',0'+ '), ''.'', '','') as '
else 'convert(nvarchar(4000),'+ column_name +''+') as '
end + column_name
FROM tempdb.INFORMATION_SCHEMA.Columns
WHERE table_name = ''+@NombreTablaTemporal+''


en la nueva tabla temp
SELECT @v_execselect = 'select ' +cast (@columnNames as varchar(max))+ '
into '+cast (@NombreTablaTemporal as varchar(max))+'2
from (select ' +cast (@columnConvert as varchar(max))+ ', ''2'' as
[temp##SortID] from
'+cast (@NombreTablaTemporal as varchar(max))+' union all select ''' +
replace(cast (@columnNames as varchar(max)), ',', ''',
''') + ''', ''1'') t order by [temp##SortID]'


exec (@v_execselect)

Select @v_execselect2 = N'bcp.exe "Select * from '+ @NombreTablaTemporal +
N'2 Modern_Spanish_CI_AI" queryout "'+@v_ruta+'\'+@v_fichero+'.xls'+N'"'+' -C
RAW -c -T -SMADCELTEST'

EXEC master..xp_cmdshell @v_execselect2, NO_OUTPUT


el problema es:
Cuando tengo campos de tipo money o numercos en SQL tal que asi: 2238200.00
En algun momento de la exportacion me los redondea de la forma: 2,24E+06 en
vez de sacarlo asi: 2238200,00

otro ejemplo, tal que asi: 4056300.00 redondea de la forma: 4,06E+06 en vez
de sacarlo asi: 4056300,00
solo quiero sustituir el . por la ,
conserverar los decimales.


Disculpar si no me explico mejor...
 

Leer las respuestas

#1 Alejandro Mesa
19/09/2007 - 15:50 | Informe spam
Pedro,

Ve si esto te es de ayuda.

select
replace(ltrim(str(c1, 10, 2)), '.', ',')
from
(
select cast(4056300.00 as money) as c1
) as t
go

AMB


"Pedro" wrote:


SQL server 2005
tengo una tabla temporal cuyo nombre de la tabla lo cargo en una variable:
@NombreTablaTemporal

la voy a exportar a txt.
Cargo las cabeceras de las columnas en el primer registro para mostrarlas en
el fichero.
Y convierto los distintos tipos de colunas a nvarchar ya que exporto a
texto, y poder controlar
los puntos de las columnas tipo money y sustituirlo por comas y mas cosas
En fin voy a mostrar como lo hago, lo entenderéis mejor y luego os pregunto
el problema que tengo:


SELECT @columnNames = COALESCE( @columnNames + ',', '') + column_name,
@columnConvert = COALESCE( @columnConvert + ',', '') +
case
when data_type in ('datetime', 'smalldatetime') then
'convert(nvarchar(4000),'+ column_name +',121'+') as '
when data_type in ('numeric', 'decimal') then
'replace(convert(nvarchar(4000),'+ column_name +',128'+ '), ''.'', '','') as '
when data_type in ('float', 'real', 'money', 'smallmoney') then
'replace(convert(nvarchar(4000),'+ column_name +',0'+ '), ''.'', '','') as '
else 'convert(nvarchar(4000),'+ column_name +''+') as '
end + column_name
FROM tempdb.INFORMATION_SCHEMA.Columns
WHERE table_name = ''+@NombreTablaTemporal+''


en la nueva tabla temp
SELECT @v_execselect = 'select ' +cast (@columnNames as varchar(max))+ '
into '+cast (@NombreTablaTemporal as varchar(max))+'2
from (select ' +cast (@columnConvert as varchar(max))+ ', ''2'' as
[temp##SortID] from
'+cast (@NombreTablaTemporal as varchar(max))+' union all select ''' +
replace(cast (@columnNames as varchar(max)), ',', ''',
''') + ''', ''1'') t order by [temp##SortID]'


exec (@v_execselect)

Select @v_execselect2 = N'bcp.exe "Select * from '+ @NombreTablaTemporal +
N'2 Modern_Spanish_CI_AI" queryout "'+@v_ruta+'\'+@v_fichero+'.xls'+N'"'+' -C
RAW -c -T -SMADCELTEST'

EXEC master..xp_cmdshell @v_execselect2, NO_OUTPUT


el problema es:
Cuando tengo campos de tipo money o numercos en SQL tal que asi: 2238200.00
En algun momento de la exportacion me los redondea de la forma: 2,24E+06 en
vez de sacarlo asi: 2238200,00

otro ejemplo, tal que asi: 4056300.00 redondea de la forma: 4,06E+06 en vez
de sacarlo asi: 4056300,00
solo quiero sustituir el . por la ,
conserverar los decimales.


Disculpar si no me explico mejor...




Preguntas similares