如何解决在SQL中转换/转换科学计数法[从Varchar到十进制/数字]
我有一张表,其中一列的值如下。列的数据类型为 VARCHAR 。现在,为了获得客户体验,我必须将以下值转换为实际的非科学表示法[请参阅结果]。请帮助我实现这一目标。
输入值:
1.1706260317772036d-3
3.0820440115884856d-4
5.584098106752352d-4
6.477217523714287d-4
3.897560962029404d-4
0
结果
0.0011706260317772036
0.00030820440115884856
0.0005584098106752352
0.0006477217523714287
0.0003897560962029404
0
我在下面尝试了这些,但提供了一些帮助。
select CAST(CAST('3.8761442700897326d-4' AS FLOAT) AS bigint)
SELECT CAST('3.8761442700897326d-4' as REAL)
谢谢。
解决方法
您可以这样表达:
select '3.8761442700897326d-4' + 0
我不确定您想要的结果;您的字符串中有d
,但是结果看起来像您想要的e
。您可能需要在转换之前进行替换:
select replace('3.8761442700897326d-4','d','e') + 0
,
REPLACE(str,'e') + 0
或者在数字上下文中,简单地
REPLACE(str,'e')
,
让我假设d
实际上是e
,这是实数指数的标准。如果需要,可以使用replace()
进行更改。
您可以转换为float
:
select CAST('3.8761442700897326e-4' AS float)
这不能满足您的要求,因为float
不够大。
select CAST('3.8761442700897326e-4' AS double)
这就是您想要的。但是,它受小数位数的限制。我建议将值存储为decimal
而不是double
,但这是另一回事。
但是,转换为double
(或float
)必须更改最低位数字。如果要保留所有内容,则希望尽快将值保存到decimal()
,然后执行算术操作:
select cast(left(val,18) as decimal(38,16)) * power(10,right(val,2)) as x
from (select '3.8761442700897326e-4' as val) x
Here是db 小提琴。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。