如何将varchar值转换为十进制?

时间:2018-09-27 02:45:46

标签: sql sql-server sql-insert

我有一个当前设置为nvarchar(max)的列,我想将该列转换为decimal(38,2)。我遇到的问题是,数百万行的格式为-1.943E12,并且由于存在E,当我尝试执行以下操作时会遇到错误Cannot convert nvarchar into numeric将列转换为十进制。反正有这样做吗?

CREATE TABLE practice (cost nvarchar(max))
INSERT INTO practice values ('123'),('44232.99'),('43.4432'),('1.943E12')

SELECT CAST(cost as decimal(32,2)) FROM practice

我最终想要做的是将登台表(其中所有列均为nvarchar(max))中的数据插入具有适当数据类型的表中。我一直遇到错误,因此在深入研究40列中的每列之后,我发现有5列是发生这种科学记号的地方。关于如何在不检查每一列的情况下进行大规模操作的任何建议?

INSERT INTO practice_corrected_datatypes
SELECT * FROM practice

3 个答案:

答案 0 :(得分:2)

数字不能从指数格式转换,但是浮点数可以。因此,您可以通过float来执行此操作。例如:

print cast(cast('1.943E12' as float) as decimal(38,2))

答案 1 :(得分:1)

假设您有try_parse()try_cast()

SELECT try_cast(try_parse(cost as float) as decimal(32,2))
FROM practice

优点是它们返回NULL而不是失败。您可能只需要使用内部try_parse()

SELECT cast(try_parse(cost as float) as decimal(32,2))
FROM practice

答案 2 :(得分:0)

尝试一下...

更新p 设置成本=铸造(铸造(成本为浮点数)为小数(32,2)) 从实践中 费用如“%E%”