我们如何转换和添加尾随和前导零到一个数字?例如123.45。我需要使这十位数字长,并在前面和后面有填充数字。我想将其转换为0001234500。十进制的最后一位数字后两位。删除小数点。填充剩余空间,并用零填充到前端。
到目前为止,我已经有了它,它添加了结尾的零并删除了小数点。
REPLACE(RIGHT('0'+CAST(rtrim(convert(char(10),convert(decimal(10,4),Field))) AS VARCHAR(10)),10),'.','') as New_Field
答案 0 :(得分:3)
在MySQL中,您将需要RPAD
和LPAD
来完成类似的工作,而在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;
将分别返回1
和1.00
。但是,varchar
会(因为它不是数字)会。因此,我们可以将其用于进一步的转换,然后再使用RIGHT
:
SELECT RIGHT('0000000000' + CONVERT(varchar(10),CONVERT(int,123.45 * 10000)),10);
现在,您拥有所需的值'0001234500'
。
如果只是在填充之后(因此6.5
变成0006500
),那么您应该能够通过上面的帮助找出解决方法(不需要{{ 1}})。
任何问题,请问。