-1

我有一个名为 MemberCheque 的表,其中的字段是:

MemberName, Amount

在将整数与小数分开后,我想以数字和单词的形式显示名称和相应的数量。所以我的查询是这样的:

 SELECT MemName, Amount, (SELECT (Amount)%1*100 AS lefAmn, dbo.fnNumberToWords(lefAmn)+     

'Hundred ', (Amount) - (Amount)%1 AS righAmnt,  dbo.fnNumberToWords (righAmnt)+' Cents'     

from MemberCheque) AS AmountInWords FROM MemberCheque

但我的存储过程只能将整数值转换为单词。因此,我正在将金额分成小数点前后的两部分,但是当我尝试运行此查询时,它给了我错误,即无法识别 lefAmn 和 righAmnt。因为我试图从同一个查询中发送参数。

4

2 回答 2

2

第一个问题是您有一个返回多个值的子查询,并且该select子句中的子查询不允许这样做。

您的具体问题的答案是使用cast()(或convert())使数字成为整数:

select leftAmt, rightAmt,
       (dbo.fnNumberToWords(cast(leftAmt as int))+'Hundred ' +
        dbo.fnNumberToWords(cast(rightAmt as int))+' Cents'
       ) as AmountInWords
from (SELECT (Amount%1)*100 AS leftAmt,
             (Amount) - (Amount)%1 AS rightAmt
      from MemberCheque
     ) mc
于 2013-06-08T14:29:00.030 回答
1

如果您无法更改函数,则将左/右值转换为 INT:

CAST((Amount)%1*100 AS INT) AS lefAmn
CAST((Amount) - (Amount)%1 AS INT) AS righAmnt

您不能将在同一语句中创建的别名作为函数参数传递,您需要:

dbo.fnNumberToWords (CAST((Amount)%1*100 AS INT))
dbo.fnNumberToWords (CAST((Amount) - (Amount)%1 AS INT))
于 2013-06-08T14:19:50.173 回答