Smart CONVERT float to VARCHAR in T-SQL
Smart CONVERT float to VARCHAR in T-SQL
我有以下代码
DECLARE @m FLOAT=213456789.55
DECLARE @sql VARCHAR(MAX)='INSERT INTO Test VALUES('+CONVERT(VARCHAR,@m,1)+')'
EXEC(@sql)
但结果是 213456790
而不是 213456789.55
当我尝试写 CONVERT(VARCHAR,213456789.55,1)
时 returns 213456789.55
而不是 213456790
我该如何解决?
编辑
将 @m 声明为 Decimal 如下 DECLARE @m DECIMAL(18,2)=213456789.55
解决了问题,但我想知道是否有使用 float 的其他解决方案。谢谢
您可以使用 STR
instead of CONVERT
。 STR
允许指定小数点右边的小数位数。
DECLARE @m FLOAT=213456789.55;
SELECT
@m AS [Float]
,CONVERT(VARCHAR(100),@m,0) AS Convert0
,CONVERT(VARCHAR(100),@m,1) AS Convert1
,CONVERT(VARCHAR(100),@m,2) AS Convert2
,LTRIM(STR(@m, 20, 2)) AS [Str]
结果(SQL服务器 2008)
+--------------+--------------+----------------+------------------------+--------------+
| Float | Convert0 | Convert1 | Convert2 | Str |
+--------------+--------------+----------------+------------------------+--------------+
| 213456789.55 | 2.13457e+008 | 2.1345679e+008 | 2.134567895500000e+008 | 213456789.55 |
+--------------+--------------+----------------+------------------------+--------------+
CONVERT
始终对 float
类型使用科学记数法。
试试这个:
DECLARE @m FLOAT=213456789.55
DECLARE @sql VARCHAR(MAX)='INSERT INTO Test VALUES('+CONVERT(VARCHAR,CAST(@m AS MONEY),1)+')'
EXEC(@sql)
我有以下代码
DECLARE @m FLOAT=213456789.55
DECLARE @sql VARCHAR(MAX)='INSERT INTO Test VALUES('+CONVERT(VARCHAR,@m,1)+')'
EXEC(@sql)
但结果是 213456790
而不是 213456789.55
当我尝试写 CONVERT(VARCHAR,213456789.55,1)
时 returns 213456789.55
而不是 213456790
我该如何解决?
编辑
将 @m 声明为 Decimal 如下 DECLARE @m DECIMAL(18,2)=213456789.55
解决了问题,但我想知道是否有使用 float 的其他解决方案。谢谢
您可以使用 STR
instead of CONVERT
。 STR
允许指定小数点右边的小数位数。
DECLARE @m FLOAT=213456789.55;
SELECT
@m AS [Float]
,CONVERT(VARCHAR(100),@m,0) AS Convert0
,CONVERT(VARCHAR(100),@m,1) AS Convert1
,CONVERT(VARCHAR(100),@m,2) AS Convert2
,LTRIM(STR(@m, 20, 2)) AS [Str]
结果(SQL服务器 2008)
+--------------+--------------+----------------+------------------------+--------------+
| Float | Convert0 | Convert1 | Convert2 | Str |
+--------------+--------------+----------------+------------------------+--------------+
| 213456789.55 | 2.13457e+008 | 2.1345679e+008 | 2.134567895500000e+008 | 213456789.55 |
+--------------+--------------+----------------+------------------------+--------------+
CONVERT
始终对 float
类型使用科学记数法。
试试这个:
DECLARE @m FLOAT=213456789.55
DECLARE @sql VARCHAR(MAX)='INSERT INTO Test VALUES('+CONVERT(VARCHAR,CAST(@m AS MONEY),1)+')'
EXEC(@sql)