繁体   English   中英

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

[英]SQL Server - Convert decimal to string with padding - implied decimal

我需要格式化带有左,右填充零的数字。 该数字的精度为十进制(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

另一个

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

可能以下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是您的表。

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

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

试试这个-

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM