【问题标题】:Converting any number in words [duplicate]用单词转换任何数字[重复]
【发布时间】:2013-01-23 17:49:42
【问题描述】:

是否有任何查询或函数可以将任何不转换为单词。喜欢 1001 到 1001 等。我使用的是 sql server 2005。

【问题讨论】:

  • “任何数字”是否包括识别 pi,1200 3/8 表示“八分之二百零三”,任何基数、复数和超复数,范围从 yotta 到 yocto,. ..?

标签: sql sql-server sql-server-2005


【解决方案1】:

你好试试下面的过程......它给出了你需要的输出......

程序:

CREATE FUNCTION fnNumberToWords(@Number as BIGINT)

    RETURNS VARCHAR(1024)

AS

BEGIN

      DECLARE @Below20 TABLE (ID int identity(0,1), Word varchar(32))

      DECLARE @Below100 TABLE (ID int identity(2,1), Word varchar(32))

      INSERT @Below20 (Word) VALUES

                        ( 'Zero'), ('One'),( 'Two' ), ( 'Three'),

                        ( 'Four' ), ( 'Five' ), ( 'Six' ), ( 'Seven' ),

                        ( 'Eight'), ( 'Nine'), ( 'Ten'), ( 'Eleven' ),

                        ( 'Twelve' ), ( 'Thirteen' ), ( 'Fourteen'),

                        ( 'Fifteen' ), ('Sixteen' ), ( 'Seventeen'),

                        ('Eighteen' ), ( 'Nineteen' )

       INSERT @Below100 VALUES ('Twenty'), ('Thirty'),('Forty'), ('Fifty'),

                               ('Sixty'), ('Seventy'), ('Eighty'), ('Ninety')

DECLARE @English varchar(1024) =

(

  SELECT Case

    WHEN @Number = 0 THEN  ''

    WHEN @Number BETWEEN 1 AND 19

      THEN (SELECT Word FROM @Below20 WHERE ID=@Number)

   WHEN @Number BETWEEN 20 AND 99  

     THEN  (SELECT Word FROM @Below100 WHERE ID=@Number/10)+ '-' +

           dbo.fnNumberToWords( @Number % 10)

   WHEN @Number BETWEEN 100 AND 999  

     THEN  (dbo.fnNumberToWords( @Number / 100))+' Hundred '+

         dbo.fnNumberToWords( @Number % 100)

   WHEN @Number BETWEEN 1000 AND 999999  

     THEN  (dbo.fnNumberToWords( @Number / 1000))+' Thousand '+

         dbo.fnNumberToWords( @Number % 1000) 

   WHEN @Number BETWEEN 1000000 AND 999999999  

     THEN  (dbo.fnNumberToWords( @Number / 1000000))+' Million '+

         dbo.fnNumberToWords( @Number % 1000000)

   WHEN @Number BETWEEN 1000000000 AND 999999999999  

     THEN  (dbo.fnNumberToWords( @Number / 1000000000))+' Billion '+

         dbo.fnNumberToWords( @Number % 1000000000)

   WHEN @Number BETWEEN 1000000000000 AND 999999999999999  

     THEN  (dbo.fnNumberToWords( @Number / 1000000000000))+' Trillion '+

         dbo.fnNumberToWords( @Number % 1000000000000)

  WHEN @Number BETWEEN 1000000000000000 AND 999999999999999999  

     THEN  (dbo.fnNumberToWords( @Number / 1000000000000000))+' Quadrillion '+

         dbo.fnNumberToWords( @Number % 1000000000000000)

  WHEN @Number BETWEEN 1000000000000000000 AND 999999999999999999999  

     THEN  (dbo.fnNumberToWords( @Number / 1000000000000000000))+' Quintillion '+

         dbo.fnNumberToWords( @Number % 1000000000000000000)

        ELSE ' INVALID INPUT' END

)



SELECT @English = RTRIM(@English)

SELECT @English = RTRIM(LEFT(@English,len(@English)-1))

                 WHERE RIGHT(@English,1)='-'

RETURN (@English)

END

GO

测试查询.....

SELECT NumberInEnglish=dbo.fnNumberToWords ( 18)

SELECT NumberInEnglish=dbo.fnNumberToWords ( 67)

SELECT NumberInEnglish=dbo.fnNumberToWords ( 947)

-- Nine Hundred Forty-Seven

SELECT NumberInEnglish=dbo.fnNumberToWords ( 984261)

-- Nine Hundred Eighty-Four Thousand Two Hundred Sixty-One

SELECT NumberInEnglish=dbo.fnNumberToWords ( 777999888)

/* Seven Hundred Seventy-Seven Million Nine Hundred Ninety-Nine Thousand

   Eight Hundred Eighty-Eight */

SELECT NumberInEnglish=dbo.fnNumberToWords ( 222777999888)

SELECT NumberInEnglish=dbo.fnNumberToWords ( 555222777999888)

SELECT NumberInEnglish=dbo.fnNumberToWords ( 7446744073709551616)

来源:http://www.sqlusa.com/bestpractices2008/number-to-words/

【讨论】:

  • 简单优雅的答案!不过,我正试图让它为零工作。没那么简单。
  • 请问有MYSQL的解决方案吗?
  • 看这个发帖的时间,MS-SQL现在应该有内置的func吧??我实际上想知道如何解释小数点后的数字(小数点),例如1234,89
  • 有没有人有功能做这个相反的? IE 将字符串转换为整数。
  • 如果是十进制怎么办。
【解决方案2】:

你可以试试这个,它在 oracle 中有效:

 select to_char(to_date(:number,'j'),'jsp') from dual;

或查看here获取详细链接,了解如何操作

【讨论】:

  • +1 这是唯一正确的答案。无需重新发明自行车......
  • @RachelGallen Art 不是 OP,它可能不适用于 OP,或者他可能没有尝试过。有谁知道这是否真的适用于 SQL Server?
  • @Thor84no,我想我没有想到这一点,希望 SQL Server 具有相同的功能......
  • @Rachel Gallen,你知道了——我关于改造自行车的第一条评论是指你的查询。但遗憾的是,这在 SQL Server 中可能行不通……他们需要赶上 )))
【解决方案3】:

没有这样的查询。您需要创建自己的程序,然后才能使用它。

【讨论】:

  • 根据我的理解编写一个简短程序的任何想法都将是一个冗长的使用案例等。
猜你喜欢
  • 2011-02-13
  • 2020-02-17
  • 1970-01-01
  • 2010-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多