今天在操作資料庫時,需要將字串轉換成Decimal類型。代碼如下:
select cast('0.12' as decimal(18,2));
select convert(decimal(18,2), '0.12');
當需要將科學計數法的數字字串轉換成Decimal時,這2種寫法都報錯:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.
select cast('0.12e+006' as decimal(18,2));
select convert(decimal(18,2), '0.12e+006');
網上查了很多資料都沒有找到答案。最後無意中發現float類型轉換成字串時就會產生科學計數法的數值字串:
select cast(cast(1234400000 as float) as varchar)
1.2344e+009
反向思維,那科學計數法的數值字串應該可以轉換成float類型,再轉換float到decimal。
select cast(cast('1.2344e+009' as float) as decimal(18,2))
總結: 如果是科學計數法的數值字串,可以先轉換成float然後轉換成其它數實值型別。
今天在操作資料庫時,需要將字串轉換成Decimal類型。代碼如下:
select cast('0.12' as decimal(18,2));
select convert(decimal(18,2), '0.12');
當需要將科學計數法的數字字串轉換成Decimal時,這2種寫法都報錯:
Msg 8114, Level 16, State 5, Line 1
Error converting data type varchar to numeric.
select cast('0.12e+006' as decimal(18,2));
select convert(decimal(18,2), '0.12e+006');
網上查了很多資料都沒有找到答案。最後無意中發現float類型轉換成字串時就會產生科學計數法的數值字串:
select cast(cast(1234400000 as float) as varchar)
1.2344e+009
反向思維,那科學計數法的數值字串應該可以轉換成float類型,再轉換float到decimal。
select cast(cast('1.2344e+009' as float) as decimal(18,2))
總結: 如果是科學計數法的數值字串,可以先轉換成float然後轉換成其它數實值型別。