Estoy ejecutando algunas consultas administrativas y compilando resultados sp_spaceused
en SQL Server 2008 para ver las relaciones de espacio de datos / índices de algunas tablas en mi base de datos. Por supuesto, estoy obteniendo todo tipo de números grandes en los resultados y mis ojos están comenzando a brillar. Sería realmente conveniente si pudiera formatear todos esos números con comas (987654321 se convierte en 987,654,321). Es curioso que en todos los años que he usado SQL Server, este problema nunca ha surgido ya que la mayoría del tiempo estaría formateando en la capa de presentación, pero en este caso el resultado de T-SQL en SSMS es la presentación.
He considerado simplemente crear un CLR UDF simple para resolver esto, pero parece que esto debería ser posible en el viejo T-SQL. Entonces, plantearé la pregunta aquí: ¿cómo se hace el formato numérico en T-SQL de vainilla?
fuente
Respuestas:
En SQL Server 2012 y versiones posteriores, esto formateará un número con comas:
También puede cambiar
0
el número de decimales que desee.fuente
format
función.culture
.Si bien estoy de acuerdo con todos, incluido el OP, que dice que el formateo se debe realizar en la capa de presentación, este formateo se puede lograr en T-SQL al
money
convertirlo y luego convertirlo avarchar
. Sin embargo, esto incluye decimales finales, que podrían ser eliminadosSUBSTRING
.fuente
Recomiendo Reemplazar en lugar de Substring para evitar problemas de longitud de cadena:
fuente
Para las implementaciones de SQL Server 2012+, tendrá la capacidad de usar FORMAT para aplicar el formato de cadena a los tipos de datos sin cadena.
En la pregunta original, el usuario había solicitado la posibilidad de usar comas como miles de separadores. En una pregunta cerrada como duplicada , el usuario había preguntado cómo podían aplicar el formato de moneda. La siguiente consulta muestra cómo realizar ambas tareas. También demuestra la aplicación de la cultura para hacer de esta una solución más genérica (abordando la función de Tsiridis Dimitris para aplicar el formato especial griego)
SQLFiddle para lo anterior
fuente
String index out of range: 33
Demo 1
Demuestra agregar comas:
Demo 2
Demuestra comas y puntos decimales. Observe que redondea el último dígito si es necesario.
Compatibilidad
SQL Server 2012+
.fuente
Por favor, intente con la siguiente consulta:
Formato con punto decimal derecho:
fuente
FORMAT
función esSELECT format(123456789987654321,'###,##0')
, o más simplemente,select format(123456789987654321, 'N0')
como respondió @ThomasMueller.salida = 9,876,543
y puede reemplazar 9876543 por el nombre de su columna.
fuente
Intenté el truco de dinero anterior, y esto funciona muy bien para valores numéricos con dos o menos dígitos significativos. Creé mi propia función para formatear números con decimales:
fuente
Esto pertenece en un comentario a la respuesta de Phil Hunt , pero lamentablemente no tengo el representante.
Para quitar el ".00" del final de su cadena de números, el parsename es muy útil. Tokeniza cadenas delimitadas por puntos y devuelve el elemento especificado, comenzando con el token más a la derecha como elemento 1.
Rendimientos "987,654,321"
fuente
aquí hay otro t-sql UDF
fuente
fuente
Aquí hay una función escalar que estoy usando que corrige algunos errores en un ejemplo anterior (arriba) y también maneja valores decimales (al número especificado de dígitos) (EDITADO para que también funcione con 0 y números negativos). Otra nota, el método de conversión como dinero anterior se limita al tamaño del tipo de datos DINERO, y no funciona con decimales de 4 (o más) dígitos. Ese método es definitivamente más simple pero menos flexible.
fuente
Otro UDF que, con suerte, es lo suficientemente genérico y no hace suposiciones sobre si desea redondear a un número específico de decimales:
fuente
- ================================================ =================== -
/ * Esta función necesita 3 argumentos: el primer argumento es el @Numero_str que el número como entrada de datos, y los otros 2 argumentos especifican cómo se formateará la información para la salida, esos argumentos son @Pos_Enteros y @Pos_Decimales que especifican cuántos Enteros y decimales que desea mostrar para el número que pasa como argumento de entrada. * /
fuente
Para SQL Server antes de 2012 que no incluye la función FORMAT, cree esta función:
seleccione dbo.FormatCurrency (12345678) devuelve $ 12,345,678.00
Suelta el $ si solo quieres comas.
fuente