1

我需要用左右填充的零来格式化数字。该数字的精度为十进制 (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('00' + Replace(SUBSTRING(CAST(My_Table.My_Field as varchar),1,4),'.',''),4)

它适用于数字 36.0,但对于数字 212.0,这让我得到 0212。我需要它是2120

4

4 回答 4

2

另一个

right('000'+replace(value,'.',''),4)
于 2013-08-15T13:46:50.497 回答
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
于 2013-08-15T05:27:29.050 回答
1

如果 3.0 应该是 0030 而 30.0 应该是 0300,这对于如果 120.0 应该是 1200 来说是有意义的,那么这个 select 语句应该可以工作:

SELECT SUBSTR('0000'||REPLACE(TableName.NumberColumn,'.',''),-4,4) AS Output FROM TableName;
于 2013-08-15T02:45:08.767 回答
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 是您的 TABLE。

于 2013-08-15T02:14:20.137 回答