AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 335652
Accepted
Luis Avalos
Luis Avalos
Asked: 2024-02-09 05:01:29 +0800 CST2024-02-09 05:01:29 +0800 CST 2024-02-09 05:01:29 +0800 CST

Converter números em palavras | Escreva DECIMAL USD 1.259,75 como 'Mil duzentos e cinquenta e nove dólares e setenta e cinco centavos'

  • 772
ALTER FUNCTION [dbo].[NumberToWords](@Number DECIMAL(18, 2))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @Words NVARCHAR(MAX)

SELECT @Words = 
    COALESCE(@Words + ' ', '') +
    CASE
        WHEN @Number = 0 THEN ''
        WHEN @Number BETWEEN 1 AND 99 THEN 
            CASE @Number
                WHEN 1 THEN 'One'
                WHEN 2 THEN 'Two'
                WHEN 3 THEN 'Three'
                WHEN 4 THEN 'Four'
                WHEN 5 THEN 'Five'
                WHEN 6 THEN 'Six'
                WHEN 7 THEN 'Seven'
                WHEN 8 THEN 'Eight'
                WHEN 9 THEN 'Nine'
                WHEN 10 THEN 'Ten'
                WHEN 11 THEN 'Eleven'
                WHEN 12 THEN 'Twelve'
                WHEN 13 THEN 'Thirteen'
                WHEN 14 THEN 'Fourteen'
                WHEN 15 THEN 'Fifteen'
                WHEN 16 THEN 'Sixteen'
                WHEN 17 THEN 'Seventeen'
                WHEN 18 THEN 'Eighteen'
                WHEN 19 THEN 'Nineteen'
                WHEN 20 THEN 'Twenty'
                WHEN 21 THEN 'Twenty-one'
                WHEN 22 THEN 'Twenty-two'
                WHEN 23 THEN 'Twenty-three'
                WHEN 24 THEN 'Twenty-four'
                WHEN 25 THEN 'Twenty-five'
                WHEN 26 THEN 'Twenty-six'
                WHEN 27 THEN 'Twenty-seven'
                WHEN 28 THEN 'Twenty-eight'
                WHEN 29 THEN 'Twenty-nine'
                WHEN 30 THEN 'Thirty'
                WHEN 31 THEN 'Thirty-one'
                WHEN 32 THEN 'Thirty-two'
                WHEN 33 THEN 'Thirty-three'
                WHEN 34 THEN 'Thirty-four'
                WHEN 35 THEN 'Thirty-five'
                WHEN 36 THEN 'Thirty-six'
                WHEN 37 THEN 'Thirty-seven'
                WHEN 38 THEN 'Thirty-eight'
                WHEN 39 THEN 'Thirty-nine'
                WHEN 40 THEN 'Forty'
                WHEN 41 THEN 'Forty-one'
                WHEN 42 THEN 'Forty-two'
                WHEN 43 THEN 'Forty-three'
                WHEN 44 THEN 'Forty-four'
                WHEN 45 THEN 'Forty-five'
                WHEN 46 THEN 'Forty-six'
                WHEN 47 THEN 'Forty-seven'
                WHEN 48 THEN 'Forty-eight'
                WHEN 49 THEN 'Forty-nine'
                WHEN 50 THEN 'Fifty'
                WHEN 51 THEN 'Fifty-one'
                WHEN 52 THEN 'Fifty-two'
                WHEN 53 THEN 'Fifty-three'
                WHEN 54 THEN 'Fifty-four'
                WHEN 55 THEN 'Fifty-five'
                WHEN 56 THEN 'Fifty-six'
                WHEN 57 THEN 'Fifty-seven'
                WHEN 58 THEN 'Fifty-eight'
                WHEN 59 THEN 'Fifty-nine'
                WHEN 60 THEN 'Sixty'
                WHEN 61 THEN 'Sixty-one'
                WHEN 62 THEN 'Sixty-two'
                WHEN 63 THEN 'Sixty-three'
                WHEN 64 THEN 'Sixty-four'
                WHEN 65 THEN 'Sixty-five'
                WHEN 66 THEN 'Sixty-six'
                WHEN 67 THEN 'Sixty-seven'
                WHEN 68 THEN 'Sixty-eight'
                WHEN 69 THEN 'Sixty-nine'
                WHEN 70 THEN 'Seventy'
                WHEN 71 THEN 'Seventy-one'
                WHEN 72 THEN 'Seventy-two'
                WHEN 73 THEN 'Seventy-three'
                WHEN 74 THEN 'Seventy-four'
                WHEN 75 THEN 'Seventy-five'
                WHEN 76 THEN 'Seventy-six'
                WHEN 77 THEN 'Seventy-seven'
                WHEN 78 THEN 'Seventy-eight'
                WHEN 79 THEN 'Seventy-nine'
                WHEN 80 THEN 'Eighty'
                WHEN 81 THEN 'Eighty-one'
                WHEN 82 THEN 'Eighty-two'
                WHEN 83 THEN 'Eighty-three'
                WHEN 84 THEN 'Eighty-four'
                WHEN 85 THEN 'Eighty-five'
                WHEN 86 THEN 'Eighty-six'
                WHEN 87 THEN 'Eighty-seven'
                WHEN 88 THEN 'Eighty-eight'
                WHEN 89 THEN 'Eighty-nine'
                WHEN 90 THEN 'Ninety'
                WHEN 91 THEN 'Ninety-one'
                WHEN 92 THEN 'Ninety-two'
                WHEN 93 THEN 'Ninety-three'
                WHEN 94 THEN 'Ninety-four'
                WHEN 95 THEN 'Ninety-five'
                WHEN 96 THEN 'Ninety-six'
                WHEN 97 THEN 'Ninety-seven'
                WHEN 98 THEN 'Ninety-eight'
                WHEN 99 THEN 'Ninety-nine'
            END
        WHEN @Number BETWEEN 100 AND 999 THEN 
            dbo.NumberToWords(@Number / 100) + ' Hundred ' + dbo.NumberToWords(@Number % 100)
        WHEN @Number BETWEEN 1000 AND 999999 THEN 
            dbo.NumberToWords(@Number / 1000) + ' Thousand ' + dbo.NumberToWords(@Number % 1000)
        WHEN @Number BETWEEN 1000000 AND 999999999 THEN 
            dbo.NumberToWords(@Number / 1000000) + ' Million ' + dbo.NumberToWords(@Number % 1000000)
        ELSE 'Value too large'
    END
        
RETURN @Words
END

Para chamá-lo estou usando

DECLARE @Number DECIMAL(18, 2) = 1004
SELECT dbo.NumberToWords(@Number) AS Words

ERROS DE CASO:

  • 20 ✅ Vinte
  • 100 ✅ Cem
  • 101 ❌ NULO
  • 102 ❌ NULO
  • 105 ❌ NULO
  • 200 ✅ Duzentos
  • 204 ❌ NULO
  • 1000 ✅ Mil
  • 1004 ✅ Mil e Quatro
  • 1005 ❌ NULO
  • 1020 ❌ NULO

Achei que era porque não poderia recorrer mais de uma vez, mas lida com Mil e Quatro sem problemas.

sql-server
  • 1 1 respostas
  • 39 Views

1 respostas

  • Voted
  1. Best Answer
    Craig
    2024-02-09T11:10:02+08:002024-02-09T11:10:02+08:00

    Modifique as partes 100/1000/1000000 "WHEN" da instrução SELECT para ficarem assim e você deverá obter o resultado desejado.

    WHEN @Number BETWEEN 100 AND 999 THEN 
        dbo.NumberToWords((@Number - @Number % 100) / 100) + ' Hundred ' + dbo.NumberToWords(@Number % 100)
    WHEN @Number BETWEEN 1000 AND 999999 THEN 
        dbo.NumberToWords((@Number - @Number % 1000) / 1000) + ' Thousand ' + dbo.NumberToWords(@Number % 1000)
    WHEN @Number BETWEEN 1000000 AND 999999999 THEN 
        dbo.NumberToWords((@Number - @Number % 1000000) / 1000000) + ' Million ' + dbo.NumberToWords(@Number % 1000000)
    

    Desta forma, você está passando números inteiros em suas subchamadas para a função, em vez de valores fracionários que não são atendidos no caso "1 a 99"

    • 2

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve