una texto string_split separar por numero formato espacios dividir delimitada decimales comas columnas caracter cadena buscar sql sql-server sql-server-2005 tsql

sql - texto - ¿Cómo convierto un número a una cadena numérica con formato de coma separada?



string_split (9)

Desde SQL Server 2012 (y arriba), el método FORMAT () proporciona la solución más rápida y fácil. Aquí hay algunos consejos.

Sintaxis : Format( value, format [, culture ] )

Devoluciones : La función de formato devuelve la cadena NVarchar formateada con el formato especificado y con cultura opcional. (Devuelve NULL para una cadena de formato no válida).

Nota: La función Format () es consistente en CLR / todos los lenguajes .NET y proporciona la máxima flexibilidad para generar resultados con formato.

Los siguientes son algunos tipos de formato que pueden lograrse usando esta función:

  • Formato numérico / de moneda : ''C'' para moneda, número ''N'' sin el símbolo de moneda, ''x'' para Hexa-decimales.

  • Formato de fecha / hora : fecha corta ''d'', fecha larga ''D'', fecha / hora completa corta ''f'', fecha / hora completa larga ''F'', tiempo corto ''t'', tiempo largo ''T'', ''m'' mes + día, ''y'' año + mes.

  • Formato personalizado : puede crear su propio formato personalizado utilizando ciertos símbolos / caracteres, como dd, mm, aaaa, etc. (para fechas). símbolos de moneda hash (#) (£ $ etc.), coma (,) y así sucesivamente. Vea los ejemplos a continuación.

Ejemplos :

Ejemplos de formatos numéricos / de moneda incorporados :

 select FORMAT(1500350.75, ''c'', ''en-gb'') --> £1,500,350.75  select FORMAT(1500350.75, ''c'', ''en-au'') --> $1,500,350.75  select FORMAT(1500350.75, ''c'', ''en-in'') --> ₹ 15,00,350.75

Ejemplos de formatos de fecha incorporados :

 select FORMAT(getdate(), ''d'', ''en-gb'') --> 20/06/2017  select FORMAT(getdate(), ''D'', ''fr-fr'') --> mardi 20 juin 2017  select FORMAT(getdate(), ''F'', ''en-us'') --> Tuesday, June 20, 2017 10:41:39 PM  select FORMAT(getdate(), ''T'', ''en-gb'') --> 22:42:29

Ejemplos de formato personalizado :

 select FORMAT(GETDATE(), ''dd/MM/yyyy'') --> 20/06/2017  select FORMAT(GETDATE(), ''dd-MMM-yyyy'') --> 20/Jun/2017  select FORMAT(GETDATE(), ''dd.MMMM.yyyy HH:mm:ss'') --> 20.June.2017 22:47:20  select FORMAT(123456789.75,''$#,#.00'') --> $123,456,789.75  select FORMAT(123456789.75,''£#,#.0'') --> £123,456,789.8

Vea MSDN para más información.

¿Hay una manera fácil de convertir un número (en mi caso, un entero) a una cadena nvarchar separada por comas?

Por ejemplo, si tengo un valor int de 1000000 almacenado en un campo, ¿cómo puedo convertirlo en una cadena nvarchar con el resultado obtenido de "1,000,000"?

Fácilmente podría escribir una función para hacer esto, pero quería asegurarme de que no había una forma más sencilla de realizar una llamada a CAST o CONVERT .


En DB2 puede usar: varchar_format (1234, ''99999G999'') resultado: 1,234


La razón por la que no encuentra ejemplos fáciles de cómo hacer esto en T-SQL es que generalmente se considera una mala práctica implementar la lógica de formato en el código SQL. Los RDBMS simplemente no están diseñados para su presentación. Si bien es posible realizar un formateo limitado, casi siempre es mejor dejar que la aplicación o la interfaz de usuario manejen este formato.

Pero si debes (¡y algunas veces debemos!) Usar T-SQL, convertir tu int en dinero y convertirlo a varchar, así:

select convert(varchar,cast(1234567 as money),1)

Si no quieres los decimales finales, haz esto:

select replace(convert(varchar,cast(1234567 as money),1), ''.00'','''')

¡Buena suerte!


Miré varias de las opciones. Aquí están mis dos favoritos, porque necesitaba redondear el valor.

,DataSizeKB = replace(convert(varchar,Cast(Round(SUM(BigNbr / 0.128),0)as money),1), ''.00'','''') ,DataSizeKB2 = format(Round(SUM(BigNbr / 0.128),0),''##,##0'') ----------------- --- below if the full script where I left DataSizeKB in both methods ----------- --- enjoy --------- --- Hank Freeman : [email protected] ----------------------------------- --- Scritp to get rowcounts and Memory size of index and Primary Keys SELECT FileGroupName = DS.name ,FileGroupType = CASE DS.[type] WHEN ''FG'' THEN ''Filegroup'' WHEN ''FD'' THEN ''Filestream'' WHEN ''FX'' THEN ''Memory-optimized'' WHEN ''PS'' THEN ''Partition Scheme'' ELSE ''Unknown'' END ,SchemaName = SCH.name ,TableName = OBJ.name ,IndexType = CASE IDX.[type] WHEN 0 THEN ''Heap'' WHEN 1 THEN ''Clustered'' WHEN 2 THEN ''Nonclustered'' WHEN 3 THEN ''XML'' WHEN 4 THEN ''Spatial'' WHEN 5 THEN ''Clustered columnstore'' WHEN 6 THEN ''Nonclustered columnstore'' WHEN 7 THEN ''Nonclustered hash'' END ,IndexName = IDX.name ,RowCounts = replace(convert(varchar,Cast(p.rows as money),1), ''.00'','''') --- MUST show for all types when no Primary key --,( Case WHEN IDX.[type] IN (2,6,7) then 0 else p.rows end )as Rowcounts_T ,AllocationDesc = AU.type_desc /* ,RowCounts = p.rows --- MUST show for all types when no Primary key ,TotalSizeKB2 = Cast(Round(SUM(AU.total_pages / 0.128),0)as int) -- 128 pages per megabyte ,UsedSizeKB = Cast(Round(SUM(AU.used_pages / 0.128),0)as int) ,DataSizeKB = Cast(Round(SUM(AU.data_pages / 0.128),0)as int) --replace(convert(varchar,cast(1234567 as money),1), ''.00'','''') */ ,TotalSizeKB = replace(convert(varchar,Cast(Round(SUM(AU.total_pages / 0.128),0)as money),1), ''.00'','''') -- 128 pages per megabyte ,UsedSizeKB = replace(convert(varchar,Cast(Round(SUM(AU.used_pages / 0.128),0)as money),1), ''.00'','''') ,DataSizeKB = replace(convert(varchar,Cast(Round(SUM(AU.data_pages / 0.128),0)as money),1), ''.00'','''') ,DataSizeKB2 = format(Round(SUM(AU.data_pages / 0.128),0),''##,##0'') ,DataSizeKB3 = format(SUM(AU.data_pages / 0.128),''##,##0'') --SELECT Format(1234567.8, ''##,##0.00'') --- ,is_default = CONVERT(INT,DS.is_default) ,is_read_only = CONVERT(INT,DS.is_read_only) FROM sys.filegroups DS -- you could also use sys.data_spaces LEFT JOIN sys.allocation_units AU ON DS.data_space_id = AU.data_space_id LEFT JOIN sys.partitions PA ON (AU.[type] IN (1,3) AND AU.container_id = PA.hobt_id) OR (AU.[type] = 2 AND AU.container_id = PA.[partition_id]) LEFT JOIN sys.objects OBJ ON PA.[object_id] = OBJ.[object_id] LEFT JOIN sys.schemas SCH ON OBJ.[schema_id] = SCH.[schema_id] LEFT JOIN sys.indexes IDX ON PA.[object_id] = IDX.[object_id] AND PA.index_id = IDX.index_id ----- INNER JOIN sys.partitions p ON obj.object_id = p.OBJECT_ID AND IDX.index_id = p.index_id WHERE OBJ.type_desc = ''USER_TABLE'' -- only include user tables OR DS.[type] = ''FD'' -- or the filestream filegroup GROUP BY DS.name ,SCH.name ,OBJ.name ,IDX.[type] ,IDX.name ,DS.[type] ,DS.is_default ,DS.is_read_only -- discard different allocation units ,p.rows ,AU.type_desc --- ORDER BY DS.name ,SCH.name ,OBJ.name ,IDX.name --- ;


No estoy seguro de que funcione en tsql, pero algunas plataformas tienen to_char() :

test=#select to_char(131213211653.78, ''9,999,999,999,999.99''); to_char ----------------------- 131,213,211,653.78 test=# select to_char(131213211653.78, ''9G999G999G999G999D99''); to_char ----------------------- 131,213,211,653.78 test=# select to_char(485, ''RN''); to_char ----------------- CDLXXXV

Como sugiere el ejemplo, la longitud del formato debe coincidir con la del número para obtener los mejores resultados, por lo que es posible que desee envolverlo en una función (por ejemplo, number_format ()) si es necesario.

La conversión a dinero también funciona, como lo señalan los otros respondedores.

test=# select substring(cast(cast(131213211653.78 as money) as varchar) from 2); substring -------------------- 131,213,211,653.78


Para SQL Server 2012 o posterior, una solución más fácil es usar la documentación FORMAT () .
P.EJ:

SELECT Format(1234567.8, ''##,##0'')

Resultados en: 1,234,568


Rápido y sucio para int nnn, nnn ...

declare @i int = 123456789 select replace(convert(varchar(128), cast(@i as money), 1), ''.00'', '''') >> 123,456,789


Realmente no deberías estar haciendo eso en SQL, deberías formatearlo en el middleware. Pero reconozco que a veces hay un caso de ventaja que requiere que uno haga tal cosa.

Esto parece que podría tener su respuesta:

¿Cómo formateo un número con comas en T-SQL?


eliminar las comas con un reemplazo y convertir:

CONVERT(INT,REPLACE([varName],'','',''''))

donde varName es el nombre de la variable que tiene valores numéricos con comas