Sql-Server
浮動到無尾隨零的 varchar
我有一段時間試圖將一個
FLOAT(53)
欄位轉換VARCHAR
為沒有尾隨零或科學記數法的欄位。該欄位可能有一個非常大或非常小的數字。我需要將其轉換為 VARCHAR 並在小數點後最多顯示 5 位數字,但不顯示尾隨零。所以 123.456789 應該是 123.45678 而 123456.78 應該是 123456.78。
我有一個 SQL Fiddle 顯示我嘗試過的內容:http ://sqlfiddle.com/#!6/bd392/4
SQL Server 2012 及更高版本的支持
FORMAT
,它啟用了類似 .NET 的格式字元串,這使這項任務變得相當容易;只需使用FORMAT(Num, '0.#####')
在這里工作 SQL Fiddle 。
好的,這是我的解決方案。它利用了 STR 的可選參數,絕對不漂亮,但它確實有效。確實,字元串操作(就是這樣)應該在更高的層次上完成。
DECLARE @Test TABLE (FloatValue FLOAT(53) NOT NULL); INSERT INTO @Test (FloatValue) VALUES (10) , (.302563) , (423546532) , (34532.46524556) , (654.048); WITH CTE_Base AS ( SELECT FloatValue , StrValue = REPLACE(LTRIM(RTRIM(STR(FloatValue, 50, 5))), '.00000', '') , DecPosition = CHARINDEX('.', REPLACE(LTRIM(RTRIM(STR(FloatValue, 50, 5))), '.00000', '')) , Reversed = REVERSE(REPLACE(LTRIM(RTRIM(STR(FloatValue, 50, 5))), '.00000', '')) , LastNonZeroPos = PATINDEX( '%[^0]%', REVERSE(REPLACE(LTRIM(RTRIM(STR(FloatValue, 50, 5))), '.00000', ''))) FROM @Test) SELECT * , FinalValue = SUBSTRING(StrValue , 1 , CASE WHEN DecPosition = 0 THEN LEN(StrValue) ELSE LEN(StrValue) - LastNonZeroPos + 1 END) FROM CTE_Base;