我有一个查询,它解析字符串并将其转换为 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/