添加尾随和前导零

时间:2018-07-22 16:22:06

标签: sql sql-server

我们如何转换和添加尾随和前导零到一个数字?例如123.45。我需要使这十位数字长,并在前面和后面有填充数字。我想将其转换为0001234500。十进制的最后一位数字后两位。删除小数点。填充剩余空间,并用零填充到前端。

到目前为止,我已经有了它,它添加了结尾的零并删除了小数点。

REPLACE(RIGHT('0'+CAST(rtrim(convert(char(10),convert(decimal(10,4),Field))) AS VARCHAR(10)),10),'.','') as New_Field

2 个答案:

答案 0 :(得分:3)

在MySQL中,您将需要RPADLPAD来完成类似的工作,而在SQL Server(2012+)中,通过使用FORMAT可以得到类似的结果。

最简单的方法是用点对数字进行格式化,以使它们在格式字符串中占据正确的位置,然后删除该点。您需要指定一个语言环境,因为在不同的区域中您将获得不同的十进制符号(即使您在格式模式中使用.,您也将在各种语言环境中获得,)-使用{{1 }}确保得到一个点。

en-US

一些例子:

REPLACE(FORMAT(somenumber, '000000.0000', 'en-US'), '.', '')

给予

WITH TempTable(somenumber) AS (
    SELECT 3
    UNION SELECT 3.4 
    UNION SELECT 3.45 
    UNION SELECT 23.45 
    UNION SELECT 123.45
)
SELECT 
    somenumber,
    REPLACE(FORMAT(somenumber, '000000.0000', 'en-US'), '.', '')
FROM 
    TempTable;

答案 1 :(得分:2)

您似乎真的在想什么,您需要在这里做什么。如果我们分步骤进行,也许您会发现可以轻松实现。此解决方案的运行思路是,值123.45变为0001234500,而值6.5变为0000065000

首先,让我们在数字123.45的右边填充,这样我们就可以拥有1234500了:123. 45 * 100 = 12345因此,要获得1234500,我们只需要将其乘以几个10的额外因素:

SELECT 123.45 * 10000; --1234500.00

好吧,现在,让我们摆脱那些小数位。最简单的方法,将其转换为int

SELECT CONVERT(int, 123.45 * 10000); --1234500

好!现在,最后一步,前导0。在SQL Server中,数值不会显示前导零。 SELECT 01, 001.00;将分别返回11.00。但是,varchar会(因为它不是数字)会。因此,我们可以将其用于进一步的转换,然后再使用RIGHT

SELECT RIGHT('0000000000' + CONVERT(varchar(10),CONVERT(int,123.45 * 10000)),10);

现在,您拥有所需的值'0001234500'

如果只是在填充之后(因此6.5变成0006500),那么您应该能够通过上面的帮助找出解决方法(不需要{{ 1}})。

任何问题,请问。