我有大量的卡片令牌(16位)从xml文件上传到sql-server.问题是我将它们视为表达式,示例如下:
3.3733E+15
3.3737E+15
3.3737E+15
3.3737E+15
3.37391E+15
3.37391E+15
3.37398E+15
3.37453E+15
3.37468E+15
3.37468E+15
3.3747E+15
3.37486E+15
3.37486E+15
3.37567E+15
3.3759E+15
3.3759E+15
是否有任何建议将其更改为16位数字?我试图改变数据类型,但得到了错误"Conversion failed when converting the varchar value '3.37201E+15' to data type int"
感谢帮助!
编辑:
@XLAnt请参阅下面的代码.我从另一个表创建这个表,它只是从xml文件中纯插入.这可能会导致错误,因为列TOKEN中的某些行是空的吗?
 CREATE TABLE MULTICURRENCY_CHECK
    (
    TOKEN varchar(255)
    )
    /*Merges all card tokens into 1 column, as in xml they are spread across different columns*/                                
    INSERT INTO MULTICURRENCY_CHECK
    (
    TOKEN
    )
    SELECT no FROM gpstransactionsnew2
        UNION ALL
    SELECT no19 FROM gpstransactionsnew2
        UNION ALL
    SELECT no68 FROM gpstransactionsnew2
        UNION ALL
    SELECT no93 FROM gpstransactionsnew2
        UNION ALL
    SELECT no107 FROM gpstransactionsnew2
        UNION ALL
    SELECT no121 FROM gpstransactionsnew2
    SELECT REPLACE(TOKEN, 'OW1', ' ')
    FROM MULTICURRENCY_CHECK
    /*Converts exponential expression to number*/
    SELECT CONVERT(numeric(16,0), CAST(TOKEN AS FLOAT))
    FROM MULTICURRENCY_CHECK
xle*_*ier 20
尝试在转换之前将字符串转换为float:
SELECT CONVERT(numeric(16,0), CAST(TOKEN AS FLOAT))
FROM MULTICURRENCY_CHECK
我不知道XML源代码中这些数字的格式是什么,但是根据你提供的数据,你最终会得到33733,然后是一堆零.如果您的XML具有更高的精度,也许您应该调整导入设置以保持此精度,而不是尝试在数据库中处理它.
编辑:
尝试测试你的字符串,ISNUMERIC以避免你得到的投射错误.添加列的原始输出将允许您检查哪个值无法转换(即转换为0).
SELECT TOKEN, 
       CONVERT(NUMERIC(16, 0), CAST(CASE 
                                      WHEN ISNUMERIC(TOKEN) = 1 THEN 
                                      TOKEN 
                                      ELSE 0 
                                    END AS FLOAT)) 
FROM   MULTICURRENCY_CHECK
| 归档时间: | 
 | 
| 查看次数: | 46974 次 | 
| 最近记录: |