转换为 float 将返回结果限制为仅 7 个字符

Conversion to float limits the returned result to only 7 characters

我有一个查询,它解析一个字符串并将其转换为浮点数,然后将结果相加。

这是代码:

[XXX]      = (SELECT CAST((SUBSTRING (SUBSTRING('351856040522039,241111;1G,150403155719,A,1357.0198N,12136.8786E,0.0,345,1.0,01004000;', 42, 9),0,3))AS float) + (CAST((SUBSTRING (SUBSTRING('351856040522039,241111;1G,150403155719,A,1357.0198N,12136.8786E,0.0,345,1.0,01004000;', 42, 9),3,6))AS float)/60))

如果我突出显示 select 一直到最后这就是结果

13.9503166666667

但是当我使用整个代码时:

INSERT INTO TblCurrent_TEMP(XXX)
SELECT [XXX]      = (SELECT CAST((SUBSTRING (SUBSTRING('351856040522039,241111;1G,150403155719,A,1357.0198N,12136.8786E,0.0,345,1.0,01004000;', 42, 9),0,3))AS float) + (CAST((SUBSTRING (SUBSTRING('351856040522039,241111;1G,150403155719,A,1357.0198N,12136.8786E,0.0,345,1.0,01004000;', 42, 9),3,6))AS float)/60))

这个returns喜欢这个

13.9503

我期待这样的结果

13.950316

我的查询有问题吗

我的table结构是

XXX varchar(500)

试试这个... 将 xxx 的数据类型更改为 numeric(10,6)

    create table TblCurrent_TEMP
    (
        XXX numeric(10,6)
    )

    insert into TblCurrent_TEMP
    select (SELECT CAST((SUBSTRING (SUBSTRING('351856040522039,241111;1G,150403155719,A,1357.0198N,12136.8786E,0.0,345,1.0,01004000;', 42, 9),0,3))AS float) + (CAST((SUBSTRING (SUBSTRING('351856040522039,241111;1G,150403155719,A,1357.0198N,12136.8786E,0.0,345,1.0,01004000;', 42, 9),3,6))AS float)/60))


     select * from TblCurrent_TEMP

您可以使用STR函数

Returns character data converted from numeric data.

所以像

DECLARE @TABLE TABLE(
        XXX VARCHAR(500)
)
INSERT INTO @TABLE (XXX)
SELECT XXX = LTRIM(STR((SELECT CAST((SUBSTRING (SUBSTRING('351856040522039,241111;1G,150403155719,A,1357.0198N,12136.8786E,0.0,345,1.0,01004000;', 42, 9),0,3))AS float) + (CAST((SUBSTRING (SUBSTRING('351856040522039,241111;1G,150403155719,A,1357.0198N,12136.8786E,0.0,345,1.0,01004000;', 42, 9),3,6))AS float)/60)), 500, 10))

SELECT  *
FROM    @TABLE

来自 CAST and Convert 您会注意到从 FLOAT 到 VARCHAR 的转换是隐式的,并且有一节提到 截断和舍入结果

此外,在以下结果中获得战利品

SELECT  CAST(CAST(5.5 AS FLOAT) AS VARCHAR(10)),
        CAST(CAST(5.55 AS FLOAT) AS VARCHAR(10)),
        CAST(CAST(5.555 AS FLOAT) AS VARCHAR(10)),
        CAST(CAST(5.5555 AS FLOAT) AS VARCHAR(10)),
        CAST(CAST(5.55555 AS FLOAT) AS VARCHAR(10)),
        CAST(CAST(5.555555 AS FLOAT) AS VARCHAR(10)),
        CAST(CAST(5.5555555 AS FLOAT) AS VARCHAR(10)),
        CAST(CAST(5.55555555 AS FLOAT) AS VARCHAR(10))

SELECT  STR(CAST(5.5 AS FLOAT),10,10),
        STR(CAST(5.55 AS FLOAT),10,10),
        STR(CAST(5.555 AS FLOAT),10,10),
        STR(CAST(5.5555 AS FLOAT),10,10),
        STR(CAST(5.55555 AS FLOAT),10,10),
        STR(CAST(5.555555 AS FLOAT),10,10),
        STR(CAST(5.5555555 AS FLOAT),10,10),
        STR(CAST(5.55555555 AS FLOAT),10,10)

您可能应该将值存储在更合适的类型中,除非这是一个属性 table,它应该存储多种类型。