2017-07-08 97 views
2

我需要在SQL Server中將其轉換爲浮點數並填充零。在SQL Server中轉換爲浮點數並填充爲零

我需要這種格式####.##

例如:

2.23 -> 0002.23 
123.3 -> 0123.30 
12.65 -> 0012.65 
34  -> 0034.00 

我嘗試這樣做:

cast(Weight as decimal(6, 2)) 

,並且還這樣:

REPLACE(STR(Weight, 6), SPACE(1), '0') 

和此:

REPLACE(STR(cast(Weight as decimal(6,2)), 6), SPACE(1), '0') 

但他們不工作 - 我得到5.00000005,我需要0005.00

感謝

回答

4

一種方式如果SQL Server 2012+,FORMAT()是一種選擇。

Select format(123.3,'0000.00') 

返回

0123.30 

Format()有一些不錯的功能,但並不是它的性能

稱爲
+0

每次我以前忘了這個'FORMAT':/ +1 –

+0

謝謝,它的作品 – Gold

+0

@金子快樂它的幫助。 –

1

我不知道如何數學實現這一目標,但這裏是字符串操作

DECLARE @num NUMERIC(22, 2) = '2.23', 
     @temp VARCHAR(100) 

SET @temp = Cast(@num AS VARCHAR(100)) 

SELECT RIGHT('000'+LEFT(@temp, Charindex('.', @temp)-1), 4) 
     + LEFT(Substring(@temp, Charindex('.', @temp), Len(@temp))+'0', 3) 
0

這應該這樣做

CREATE FUNCTION [usf_PadFloat] (@InputNum Float, @PadLen Integer) 
RETURNS varchar(25) 
/**************************************************************************************** 
-- Returns current time if null 
-- (No it doesn't I just lack at changing comments when I reuse code) 

select dbo.[usf_PadFloat](28.1273, 4) 
select dbo.[usf_PadFloat](17, 4) 
select dbo.[usf_PadFloat](2.23, 4) 
select dbo.[usf_PadFloat](123.3, 4) 
select dbo.[usf_PadFloat](12.65, 4) 
select dbo.[usf_PadFloat](34, 4) 

****************************************************************************************/ 
AS 
    BEGIN 
    DECLARE @Retval varchar(25) 

     Select @InputNum = Round(@InputNum,2) 

     Select @Retval = cast(@InputNum as varchar(25)) 

     if charindex('.',@Retval) = 0 
      Select @Retval += '.00' 

     While charindex('.',Reverse(@Retval)) <> 3 and len(@Retval) < 100 --just n case. 
      Select @Retval += '0' 

     select @Retval = Right(replicate('0',@padlen+3) + @Retval, @Padlen+3) 

     return @Retval 
    END 
1

我會用STR(FloatValue, Precision, Scale)從而

DECLARE @f FLOAT 
SET @f = 12.3 
SELECT *, STR(x.FltCol, 10, 2) AS FltCol2, REPLACE(STR(x.FltCol, 10, 2), ' ', '0') AS FltCol3 
FROM (
    SELECT 1, CONVERT(FLOAT, 12.34) UNION ALL 
    SELECT 1, CONVERT(FLOAT, 12.3) 
) x(ID, FltCol) 

結果:

ID   FltCol     FltCol2 FltCol3 
----------- ---------------------- ---------- ---------- 
1   12.34      12.34 0000012.34 
1   12.3      12.30 0000012.30 

實施例:STR(12.3, 10, 2)將返回原始值從而格式化:

  • 總位數= 10位數字(填充用空間)
  • 位數小數分隔符後= 2位數字(用0填充)。
+1

哇,很高興知道[STR](https://docs.microsoft.com/en-us/sql/t-sql/functions/str-transact-sql) –