将Varchar转换为double

时间:2013-10-23 08:17:21

标签: sql db2 varchar

我在varchar列中有这些数据,这些数字在数字的末尾有符号,并且想要转换为数字,并且符号必须反映在最终结果中,例如91.99-应该是-91.99 < / p>

示例数据

Curr_bal
934.75+
9123.05+
91.99-
9.77-

如何使用SQL命令转换和处理这2个场景。真的需要你的帮助。 顺便说一下,我试着为DB2编写SQL。

1 个答案:

答案 0 :(得分:0)

您可以使用substr()和length()从varchar中提取符号(最后一个字符)和值(从第一个到第二个到最后一个字符)。然后使用连接运算符将其与前面的符号粘合在一起。像这样:

db2 => select curr_bal, substr(curr_bal,length(curr_bal),1) || substr(curr_bal,1,length(curr_bal)-1) from signswap;

CURR_BAL                         2                                
-------------------------------- ---------------------------------
934.75+                          +934.75                          
9123.05+                         +9123.05                         
91.99-                           -91.99                           
9.77-                            -9.77                            

  4 record(s) selected.

db2 =>

一旦你在前面有了标志,就可以把它作为数字投射,或者在某些情况下,DB2会把它投射给你。例如,您可以将其插入到具有数字类型列的另一个表中,而无需显式转换它:

db2 => create table numeric(curr_bal decimal(12,2));
DB20000I  The SQL command completed successfully.
db2 => insert into numeric select substr(curr_bal,length(curr_bal),1) || substr(curr_bal,1,length(curr_bal)-1) from signswap;
DB20000I  The SQL command completed successfully.
db2 => select * from numeric;

CURR_BAL      
--------------
        934.75
       9123.05
        -91.99
         -9.77

  4 record(s) selected.

db2 =>