当前位置: 首页 > 面试题库 >

在MYSQL中将数字转换为单词!使用查询

汪德寿
2023-03-14
问题内容

当我在mysql中执行查询时,我尝试按以下方式打印输出。

Name    Salary  Sal_in_Words
Mohan   45000   Rupees Forty Five Thousand Only

Salary列的值为45000,第三列中的第二列中的Value通过Query转换为单词。

我找到了一些文章,在Oracle中可以使用以下查询获得如上所述的结果:

select Salary, (' Rs. '|| (to_char(to_date(sal,'j'), 'Jsp'))|| ' only.')) Sal_in_Words from employee

输出:

Name    Salary  Sal_in_Words
Suresh  45000   Rupees Forty Five Thousand Only

在MySQL中,我尝试了LPAD,RPAD,但那些只是将字符串添加到结果中,而不是将单词转换为字符串。

我找到了一些教程,但所有这些教程都对“ TO_CHAR(日期)”进行了说明。

有什么办法吗?


问题答案:
PROCEDURE TO GENERATE NUMBER TO WORDS FORMAT...........

CREATE DEFINER=`root`@`localhost` PROCEDURE `xnum2txt`(in nNum int(8))
BEGIN
   declare cRetVal,cTxt,cX1,cX2 varchar(500);
    set nNum=floor(nNum);
    set cRetval='';
    set cTxt='';
            if nnum<0 then
                set cRetval="-"+ xNum22Txt(nnum*-1);
            elseif nNum<11 then 
                set cTxt="Zero One  Two  ThreeFour Five Six  SevenEightNine Ten  ";
                set cRetVal= trim(substring(cTxt,(nNum * 5) + 1,5)) ;
            ELSEIF nNum < 20 then 
                set cTxt = "Eleven   Twelve   Thirteen Fourteen Fifteen  Sixteen  SeventeenEighteen Nineteen ";
                set cRetval = trim(substring(cTxt,((nNum - 11) * 9) + 1,9));
            ELSEIF nNum < 30 then
                  set cRetval = "Twenty" + if(nNum > 20,"-" + xnum22txt(nNum-20)," ");
            ELSEIF nNum < 40 then
                  set cRetval = "Thirty" + if(nNum > 30,"-" + xnum22txt(nNum-30)," ");
            ELSEIF nNum < 50 then 
                  set cRetval = "Forty" + if(nNum > 40,"-" + xnum22txt(nNum-40)," ");
            ELSEIF nNum < 60 then
                  set cRetval = "Fifty" + if(nNum > 50,"-" + xnum22txt(nNum-50)," ");
            ELSEIF nNum < 70 then
                  set cRetval = "Sixty" + if(nNum > 60,"-" + xnum22txt(nNum-60)," ");
            ELSEIF nNum < 80 then
                  set cRetval = "Seventy" + if(nNum > 70,"-" + xnum22txt(nNum-70)," ");
            ELSEIF nNum < 90 then
                  set cRetval = "Eighty" + if(nNum > 80,"-" + xnum22txt(nNum-80)," ");
            ELSEIF nNum < 100 then
                  set cRetval = "Ninety" + if(nNum > 90,"-" + xnum22txt(nNum-90)," ");
            ELSEIF nNum < 1000 then
                  set cX1 = floor(nNum/100);
                  set cX2 = nNum-(cX1*100);
                  set cRetval = xnum22txt(cX1) + "Hundred" + if(cX2 > 0," " + xnum22txt(cX2)," ");
           ELSEIF nNum < 1000000 then
                  set cX1 = floor(nNum/1000);
                  set cX2 = nNum-(cX1*1000);
                  set cRetval = xnum22txt(cX1) + "Thousand" + if(cX2 > 0,", " + xnum22txt(cX2)," ");
           ELSEIF nNum < 1000000000 then
                  set cX1 = floor(nNum/1000000);
                  set cX2 = nNum-(cX1*1000000);
                  set cRetval = xnum22txt(cX1) + "Million" + if(cX2 > 0,", " + xnum22txt(cX2)," ");
           ELSEIF nNum < 1000000000000 then
                  set cX1 = floor(nNum/1000000000);
                  set cX2 = nNum-(cX1*1000000000);
                  set cRetval = xnum22txt(cX1) + "Billion" + if(cX2 > 0,", " + xnum22txt(cX2)," ");
            ELSE
                  set cRetval = "***";
            end if;
            select cRetVal;
END


 类似资料:
  • 问题内容: 我正在尝试将以单词形式编写的数值转换为整数。例如,“ iPhone有233.7万个应用程序”将变成“ iPhone为230783个应用程序” 在开始编码之前,我想知道此转换是否存在任何功能/代码。 问题答案: 有很多页面讨论从数字到单词的转换。反方向的数量不多。 以获取一种不错的算法: 好吧,总的来说,您正在做两件事:查找标记(转换为数字的单词)和应用语法。简而言之,您正在为一种非常有

  • 问题内容: 我正在编写将给定数量转换为单词的代码,这是我在谷歌搜索后得到的。但是我认为要完成一个简单的任务需要一些冗长的代码。两个正则表达式和两个循环,我想要更简单的方法。 我正在尝试使其尽可能短。并发布我的想法 有什么建议? 同样,上面的代码转换为英语编号系统,例如Million / Billion,我不希望使用南亚编号系统。就像在Lakhs和Crores 问题答案: 更新 :看起来这比我想象的

  • 问题内容: 是否可以在MySQL查询中将文本转换为数字?我有一列带有标识符的列,该标识符由名称和数字组成,格式为“名称- 数字”。该列具有VARCHAR类型。我想根据数字(行名相同)对行进行排序,但是根据do字符顺序对列进行排序,即 如果我减少了数字,是否可以将“ varchar”数字转换为“真实”数字并用它对行进行排序?我想获得以下订单。 我无法将数字表示为单独的列。 编辑2011-05-11

  • 问题内容: 我写了一个非常简单的查询,结果为500,我需要像下面这样转换该值:- 问题答案: 用力卢克;) SqlFiddleDemo 提示采用拼写形式。 编辑: 添加对以下内容的支持: SqlFiddleDemo 编辑2: 添加对float的有限支持: SqlFiddleDemo3 编辑3: 10.3的输出为十点三,但10.3的输出为十点三,10.03的输出为十点三。我怎样才能做到这一点? 根据

  • 问题内容: 我需要将1到99之间的数字转换为单词。这是我到目前为止所得到的: 现在,到目前为止,我最大的问题是if,elif和else语句似乎不起作用。仅第一个if语句运行。 第二个问题是创建20-99之间数字的字符串版本。 PS:是的,我知道num2word库,但不允许使用它。 问题答案: 您的第一条陈述逻辑不正确。除非等于或小于1,否则该语句 始终为 True;否则,该语句 始终为 True。

  • 将给定的字符串转换为单词数组。 使用 String.split() 提供的模式(pattern)(默认为非 alpha 作为正则表达式)来转换为一个字符串数组。 使用 Array.filter() 去除任何空字符。 省略第二个参数来使用默认的正则表达式。 const words = (str, pattern = /[^a-zA-Z-]+/) => str.split(pattern).filte