[[size=18px]size=10px] 请大家帮下忙,用什么方法,可以将类似于30%这样的数据存到数据库中为0.3,导入时如何处理呢?我一开始直接使用decimal(6,4),还有类似的numrical,float都试过了,出现类型转换错误,请大家看看怎么写。[/size][/size]

解决方案 »

  1.   

    30%,假设为一个串val。case(replace(val,'%','') decimal(18,2))/100
      

  2.   

    create table tb(val varchar(20))
    insert into tb values('30%')
    insert into tb values('100%')
    insert into tb values('30.2%')
    goselect cast(replace(val,'%','') as decimal(18,2))/100
    from tbdrop table tb/*
                             
    ------------------------ 
    .300000
    1.000000
    .302000(所影响的行数为 3 行)
    */
      

  3.   

    问题是你的数据格式是怎么设置的?表字段是什么类型的?
    把数据先导入到大乌龟这个临时表中
    再insert 你的表
    select cast(replace(val,'%','') as decimal(18,2))/100
    from tb
      

  4.   


    %只是数值的format格式,和数据本身无关。
      

  5.   

    CREATE TABLE [dbo].[revealtable](
    [date] [datetime] NOT NULL,
    [r_stock_code] [int] NOT NULL,
    [r_broker_code] [nchar](10)  NOT NULL,
    [share_holding] [varchar](50) ,
    [per] [varchar](50),

    这是我的表,需要导入的数据类似于下面的类型:
    2009/12/30 00002 B01284 30,598,415 1.27%
    2009/12/30 00002 C00065 27,086,192 1.12%
      

  6.   

    用临时表再插入,效率低了点,因为处理的数据特别多,所以我想用bulk insert,能不能替换完使用bulk insert,具体该怎么做,谢谢,求教!!!
      

  7.   

    表结构改下,刚才搞错了:
    CREATE TABLE [dbo].[revealtable](
    [date] [datetime] NOT NULL,
    [r_stock_code] [int] NOT NULL,
    [r_broker_code] [nchar](10) NOT NULL,
    [share_holding] [varchar](50) ,
    [per] [decimal(6,4)](50),
    )  
    这是我的表,需要导入的数据类似于下面的类型:
    2009/12/30 00002 B01284 30,598,415 1.27%
    2009/12/30 00002 C00065 27,086,192 1.12%
      

  8.   

    可以考虑使用CLR,写一个支持正则替换的函数。