簡體   English   中英

在T-SQL中將智能CONVERT浮動到VARCHAR

[英]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)它將返回213456789.55而不是213456790

我該如何解決?

編輯

DECLARE @m DECIMAL(18,2)=213456789.55聲明為Decimal就像下面的DECLARE @m DECIMAL(18,2)=213456789.55解決了此問題,但我想知道是否還有另一種使用float的解決方案。 謝謝

您可以使用STR而不是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 Server 2008)

+--------------+--------------+----------------+------------------------+--------------+
|    Float     |   Convert0   |    Convert1    |        Convert2        |     Str      |
+--------------+--------------+----------------+------------------------+--------------+
| 213456789.55 | 2.13457e+008 | 2.1345679e+008 | 2.134567895500000e+008 | 213456789.55 |
+--------------+--------------+----------------+------------------------+--------------+

對於float類型, CONVERT始終使用科學計數法。

嘗試這個:

DECLARE @m FLOAT=213456789.55
DECLARE @sql VARCHAR(MAX)='INSERT INTO Test VALUES('+CONVERT(VARCHAR,CAST(@m AS MONEY),1)+')'
EXEC(@sql)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM