格式化字符串到小数点后两位?

时间:2019-04-15 18:54:24

标签: sql sql-server tsql

我有一个看起来像这样的数字:

'0000040000'

如何将其转换为如下所示的字符串:

400.00

这也应该适用于这样的数字:

1234540067-> 12345400.67

6 个答案:

答案 0 :(得分:2)

我怀疑可以公平地说您有一个要格式化为数字的字符串。

如果您想“学习”如何做到这一点,建议您查找SQL Server的convertcastformat函数,并获得一些额外的知识。

我选择首先转换为数字类型,然后除以100并格式化输出。 这样就无需修剪前导零。

select format(convert(numeric(18,2), '0000040001') / 100, '0.00'))

答案 1 :(得分:1)

以下SQL表达式将首先将字符串更改为十进制,然后将其转换为所需格式的字符串:

SELECT FORMAT(CAST ('0000040000' AS DECIMAL(12,2))/100,'#.00')

答案 2 :(得分:0)

您的查询更多是数学上的。 要获得小数点后的最后2个数字,请将该数字除以100,得到数字的余数。 要获取数字,请保留最后两位,然后将数字除以100。

select convert(varchar,1234540067/100)+'.'+ convert(varchar,1234540067% 100);

答案 3 :(得分:0)

这应该有效:

select convert(varchar(10), convert(decimal(10, 2), try_convert(int, '0000040000') / 100.0))

为什么要将该值作为字符串?小数对您有用吗?

另一种方法是:

select ltrim(str(try_convert(int, '0000040000') / 100.0, 10, 2))

或仅使用字符串操作:

select replace(ltrim(replace(stuff('0000040000', 9, 0, '.'), '0', ' ')), ' ', '0')

如果SQL Server中的ltrim()接受了要修剪的字符(这是大多数其他数据库所允许的),这将更加优雅。

答案 4 :(得分:0)

以下是一些可能的解决方案:

DECLARE @x CHAR(10)='0000040000'
SELECT CONVERT(VARCHAR(11),CONVERT(NUMERIC(10,2),CONVERT(NUMERIC(10),@x)/100))
SELECT CONVERT(VARCHAR(11),CONVERT(NUMERIC(10,2),STUFF(@x,9,0,'.')))

答案 5 :(得分:0)

很简单:

SELECT ROUND('0000040004', 2, 1)/100;

在SQL Server 2017中对此进行了测试。它并不关心数字是字符串这一事实,它可以对它进行数学运算。以上结果是400.04