Estou executando algumas consultas administrativas e compilando resultados sp_spaceused
no SQL Server 2008 para examinar as proporções de dados / espaço de índice de algumas tabelas no meu banco de dados. É claro que estou obtendo muitos tipos de números nos resultados e meus olhos estão começando a brilhar. Seria realmente conveniente se eu pudesse formatar todos esses números com vírgulas (987654321 passa a ser 987.654.321). Engraçado que em todos os anos em que usei o SQL Server, esse problema nunca surgiu, pois na maioria das vezes eu formatava a camada de apresentação, mas nesse caso o resultado do T-SQL no SSMS é a apresentação.
Eu considerei apenas criar um CLR UDF simples para resolver isso, mas parece que isso deve ser possível em um simples T-SQL antigo. Então, vou fazer a pergunta aqui - como você faz a formatação numérica no T-SQL de baunilha?
fonte
Respostas:
No SQL Server 2012 e superior, isso formatará um número com vírgulas:
Você também pode alterar
0
para o número de casas decimais que deseja.fonte
format
função.culture
.Embora eu concorde com todos, inclusive o OP, que diz que a formatação deve ser feita na camada de apresentação, essa formatação pode ser realizada no T-SQL
money
, convertendo e convertendo paravarchar
. Isso inclui decimais à direita, no entanto, que podem ser repetidosSUBSTRING
.fonte
Eu recomendo Substituir no lugar de Substring para evitar problemas de comprimento de string:
fonte
Para implementações do SQL Server 2012+, você poderá usar o FORMAT para aplicar a formatação de seqüência de caracteres a tipos de dados que não sejam de seqüência de caracteres.
Na pergunta original, o usuário solicitou a capacidade de usar vírgulas como separadores de milhares. Em uma pergunta fechada como duplicada , o usuário perguntou como aplicar a formatação de moeda. A consulta a seguir mostra como executar as duas tarefas. Também demonstra a aplicação da cultura para torná-la uma solução mais genérica (abordando a função de Tsiridis Dimitris de aplicar a formatação especial grega)
SQLFiddle para o acima
fonte
String index out of range: 33
Demo 1
Demonstra adição de vírgulas:
Demo 2
Demonstra vírgulas e pontos decimais. Observe que ele arredonda o último dígito, se necessário.
Compatibilidade
SQL Server 2012+
.fonte
Por favor, tente com a consulta abaixo:
Formato com ponto decimal à direita:
fonte
FORMAT
função éSELECT format(123456789987654321,'###,##0')
, ou mais simplesmente,select format(123456789987654321, 'N0')
como @ThomasMueller respondeu.output = 9.876.543
e você pode substituir 9876543 pelo nome da sua coluna.
fonte
Tentei o truque do dinheiro acima e isso funciona muito bem para valores numéricos com dois ou menos dígitos significativos. Criei minha própria função para formatar números com decimais:
fonte
Isso pertence a um comentário de Phil Hunt resposta de , mas infelizmente não tenho o representante.
Para retirar o ".00" do final da sua sequência numérica, o parsename é super útil. Ele tokeniza cadeias delimitadas por período e retorna o elemento especificado, começando com o token mais à direita como elemento 1.
Rende "987.654.321"
fonte
aqui está outro UDF t-sql
fonte
fonte
Aqui está uma função escalar que estou usando que corrige alguns erros no exemplo anterior (acima) e também lida com valores decimais (para o número especificado de dígitos) (EDITADO para também trabalhar com números 0 e negativos). Outra observação: o método de conversão como dinheiro acima é limitado ao tamanho do tipo de dados MONEY e não funciona com decimais de 4 (ou mais) dígitos. Esse método é definitivamente mais simples, mas menos flexível.
fonte
Outra UDF que é esperançosamente genérica o suficiente e não faz suposições sobre se você deseja arredondar para um número específico de casas decimais:
fonte
- ================================================== =================== -
/ * Esta função precisa de 3 argumentos: o Primeiro argumento é o @Numero_str que o Número como entrada de dados e os outros 2 argumentos especificam como as informações serão formatadas para a saída, esses argumentos são @Pos_Enteros e @Pos_Decimales que especificam quantos Os números inteiros e decimais que você deseja mostrar para o número que você passa como argumento de entrada. * /
fonte
Para o SQL Server anterior a 2012, que não inclui a função FORMAT, crie esta função:
selecione dbo.FormatCurrency (12345678) retorna $ 12.345.678,00
Largue o $ se quiser apenas vírgulas.
fonte