我需要转换为float并在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.00
或000005
,我需要0005.00
。
由于
答案 0 :(得分:5)
如果是SQL Server 2012+,则FORMAT()是一个选项。
Select format(123.3,'0000.00')
返回
0123.30
Format()
有一些很好的功能,但不知道它的性能
答案 1 :(得分: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)
答案 2 :(得分: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)
将返回格式化的原始值:
答案 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