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

时间:2016-08-30 09:56:25

标签: sql sql-server

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

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

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

代码:

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

2 个答案:

答案 0 :(得分:2)

尝试这样

DECLARE @d DECIMAL(15,2)=132.500;
SELECT REPLACE(STR(CAST(@d*100 AS int),15),' ','0')

向Dean致敬!

由于INT的值范围,上面的代码会因算术溢出异常而中断。但这适用于非常大的数字:

DECLARE @d DECIMAL(15,2)=1234567890123.45;
SELECT REPLACE(STR(CAST(@d*100 AS BIGINT),15),' ','0')

甚至更大: - )

DECLARE @d DECIMAL(15,2)=9999999999999.97;
SELECT REPLACE(STR(CAST(@d*100 AS BIGINT),15),' ','0')

9999999999999.989999999999999.99是一个很小的问题。它有效,如果你带有前导零的16位数......

答案 1 :(得分:0)

这个怎么样?

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

那是:

  • 乘以1000
  • 转换为整数
  • 左边有零填充