Sql 如何将数字(15,2)转换为nvarchar(15)?

Sql 如何将数字(15,2)转换为nvarchar(15)?,sql,sql-server,Sql,Sql Server,我想将数值(15,2)值转换为nvarchar(15)字符串 值为132.500m,我希望转换后的值为0000000000 13250 我写了这段代码,但它返回了这个000000000000132 代码: SELECT REPLACE (STR(ROUND(CAST(MonthlyPayment.PaymentAmount AS NUMERIC(18,2)), 0, 1), 15), ' ', 0) FROM MonthlyPayment 这个怎么样 SELECT RIG

我想将
数值(15,2)
值转换为
nvarchar(15)
字符串

值为
132.500m
,我希望转换后的值为
0000000000 13250

我写了这段代码,但它返回了这个
000000000000132

代码:

SELECT 
    REPLACE (STR(ROUND(CAST(MonthlyPayment.PaymentAmount AS NUMERIC(18,2)), 0, 1), 15), ' ', 0) 
FROM 
    MonthlyPayment
这个怎么样

SELECT RIGHT(REPLICATE('0', 15) +
             CAST(CAST(MonthlyPayment.PaymentAmount * 100 as INT) as VARCHAR(15)),
             15)
即:

  • 乘以1000
  • 转换为整数
  • 带零的左pad
像这样试试

DECLARE @d DECIMAL(15,2)=132.500;
SELECT REPLACE(STR(CAST(@d*100 AS int),15),' ','0')
更新Thx给Dean! 由于
INT
的值范围导致算术溢出异常,上述代码将中断。但这适用于非常大的数字:

DECLARE @d DECIMAL(15,2)=1234567890123.45;
SELECT REPLACE(STR(CAST(@d*100 AS BIGINT),15),' ','0')
甚至更大:-)


但是,它们在
9999999999.98
99999999999
中是一个小问题。它是有效的,如果你用一个前导零将数字增加到16位…

Hi,我不喜欢使用
RIGHT
的方法。在这种情况下,由于15位数字,它可能是正常的,但如果数字超过,它将被剪切而不会出现错误。我更喜欢使用
STR
的方法,如果数字太大,它将返回一个
*
链…顺便说一句:你的代码用空格填充,而不是用零填充-从OP-我认为
*100
是需要的…好吧,既然你对Gordon说了一句话,你的代码也会因为数字太大而失败。试着用bigint确保安全..嗨@dean,接得好,谢谢!查看我的更新。。。至少伟大的戈登本人也犯了同样的错误:-)嗨,请重新检查我的答案!对于非常大的数字,您可能会由于
INT
而遇到异常……非常感谢,伙计:)
DECLARE @d DECIMAL(15,2)=9999999999999.97;
SELECT REPLACE(STR(CAST(@d*100 AS BIGINT),15),' ','0')