我有一个当前设置为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
答案 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%”