当前位置: 首页 > 面试题库 >

在SQL中将指数转换为数字

房项禹
2023-03-14
问题内容

我有大量的卡令牌(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 thevarchar 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

问题答案:

尝试在转换之前将字符串强制转换为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


 类似资料:
  • 问题内容: 有没有一种方法可以使用内置函数在PHP中将指数数转换为整数?格式化功能? 1.2378147769392E + 14至123781477693917 问题答案: number_format(1.2378147769392E+14,0,’‘,’‘) 但是,要处理大量数字,如果要保持精度,应该研究BCMath扩展

  • 问题内容: 我试图使用像这样的数字列表。 这是sql过程的一部分,变量’list_of_ids’是varchar,它包含如下所示的id:1、2、3、4、5 ........如何使用此列表和此查询 问题答案: 也尝试一下。这可能是更好的解决方案,因为它不需要创建任何其他功能。oracle regexp_substr会将逗号分隔的值拆分为不同的行,并传递给查询。

  • 问题内容: 我的电话号码是20080331。 我需要将其转换/转换为日期时间,以便可以在数据库中进行日期比较。我将如何转换此数字。使用CONVERT(DATETIME,Value)似乎不起作用。 问题答案:

  • 问题内容: 下面的查询: 给我这样的结果: 我想要的是这样的结果: 如何更改原始SQL查询以得到上面的结果? 问题答案: 您要使用,这应该可以工作: 请注意,不再存在,因为它正在聚合。

  • 问题内容: 将FLOAT数据类型中存储的某些数据转换为INT数据类型中存储的数据时,我遇到一些问题。以下示例说明了我的问题: 预期的结果将是: 但是,当从桌子上拿出来时,我似乎没有得到。我反而得到 有谁知道为什么会这样吗?我猜想这有点浮动的细微差别。但是我从来没有想过像上面这样的问题。有任何想法吗?在此先感谢您的帮助。 问题答案: 这是经典的(int)((0.1 + 0.7)* 10) 问题。由于

  • 问题内容: 今天,我的同事要求我将数据从垂直登台表转换为水平表。我的意思是将行转换为列。我使用了PIVOT并解决了它。但是遇到了这样的情况:如果数据字段重复自身,则在移动数据时会遇到麻烦。 这是我正在处理的测试数据: 我使用PIVOT将行数据显示为列: 输出为: 但他希望输出如下: 最重要的是,登台表中可以有多个CHILD属性。我们需要考虑这一点,并将所有儿童移动到列中。 这可能吗? 问题答案: