SQL Server - 使用填充将十进制转换为字符串 - 隐含的十进制

时间:2013-08-14 22:39:47

标签: sql sql-server sql-server-2008

我需要左右填充零的数字格式。数字的精度是十进制(9,5)。我正在转换为字符串,需要它的长度为4。 我正在使用SQL Server 2008。

以下是一些例子:

If 3.0 then I need 0003
If 30.0 then I need 0030
If 112.8 then I need 1128
If 120.0 then I need 1200

等等。

我尝试了多种格式功能,如Right,Left,Replace等。但是没有任何组合似乎能让我得到正确的格式。

以下示例:

Right('00' + Replace(SUBSTRING(CAST(My_Table.My_Field as varchar),1,4),'.',''),4)

对于数字36.0它可以正常工作,但是对于数字212.0我得到0212。我需要它是2120

4 个答案:

答案 0 :(得分:2)

另一个

right('000'+replace(value,'.',''),4)

答案 1 :(得分:1)

以下的SQL代码可能会有用:

SELECT
CASE WHEN  NUMBER < 100
  THEN RIGHT('0000' + CAST(CAST(NUMBER AS INT) AS VARCHAR),4)
  ELSE RIGHT(SUBSTRING(CAST(NUMBER AS VARCHAR),1,CHARINDEX('.',CAST(NUMBER AS VARCHAR))-1),4) + LEFT(PARSENAME(NUMBER,1),1)
END RESULT
FROM TEST

您可以在此处 sqlfiddle 尝试此操作。

注意:NUMBER是您的字段,TEST是您的表。

答案 2 :(得分:1)

如果3.0应该是0030而30.0应该是0300,这对于120.0应该是1200是有意义的,那么这个select语句应该有效:

SELECT SUBSTR('0000'||REPLACE(TableName.NumberColumn,'.',''),-4,4) AS Output FROM TableName;

答案 3 :(得分:1)

试试这个 -

DECLARE @temp TABLE (Value DECIMAL(4,1))

INSERT INTO @temp (Value)
VALUES (3.0),(30.0), (112.8),(120.0)

SELECT RIGHT('000' + CAST(CAST(Value * 10 AS INT) AS VARCHAR(4)), 4) 
FROM @temp

输出 -

----
0030
0300
1128
1200