我有一个看起来像这样的数字:
'0000040000'
如何将其转换为如下所示的字符串:
400.00
这也应该适用于这样的数字:
1234540067
-> 12345400.67
答案 0 :(得分:2)
我怀疑可以公平地说您有一个要格式化为数字的字符串。
如果您想“学习”如何做到这一点,建议您查找SQL Server的convert
,cast
和format
函数,并获得一些额外的知识。
我选择首先转换为数字类型,然后除以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