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

标签 sql sql-server floating-point

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

这是代码:

[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))

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

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))

返回结果如下。

13.9503

我期望的是这样的结果

13.950316

我的查询有问题吗

我的表结构是

XXX varchar(500)

最佳答案

您可以使用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)

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

关于sql - 转换为 float 将返回结果限制为仅 7 个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29665721/

相关文章:

php - MySQL:如果所有值都存在则返回真

sql-server - 提取动态 SQL 返回的值

delphi - Formatfloat 是如何工作的

math - block 浮点运算与常规浮点运算

c++ - 标准数学函数能否正确处理无穷大?

mysql - SELECT * 特定年龄的用户

电子邮件函数中的 PHP 循环

MySQL - 基于更多索引的查找

sql - 聚集索引的困境 - ID 还是排序?

sql - 我想在数据库设计中删除表字段中的冗余