【问题标题】:Adding trailing and leading zeroes添加尾随零和前导零
【发布时间】:2018-07-22 16:22:06
【问题描述】:

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

到目前为止我有这个,它添加尾随零并删除小数。

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

【问题讨论】:

  • 您是真的同时学习 MySQL 和 SQL Server,还是只是不确定您拥有什么引擎?
  • 请仅标记您正在使用的真实数据库
  • 我正在学习 SQl Server。从 W3school 开始,然后直接进入我叔叔所说的“现实世界”查询。
  • 我删除了 MySQL 标签,并添加了 SQL 标签,因为看起来您现在使用的是 SQL Server,而不是 MySQL。
  • mysql 和 sql-server 的字符串 concat 不同,所以你应该选择一个真正的 db

标签: sql sql-server


【解决方案1】:

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

最简单的方法是用一个点格式化您的数字,以便它们在格式字符串中占据正确的位置,然后删除该点。您需要指定一个语言环境,因为在不同的地区您会得到不同的十进制符号(即使您在格式模式中使用.,您也会在各种语言环境中得到,) - 使用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;

给予

3.00    0000030000
3.40    0000034000
3.45    0000034500
23.45   0000234500
123.45  0001234500

【讨论】:

    【解决方案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)那么你应该能够在上面的帮助下弄清楚如何实现这一点(提示你不需要RIGHT)。

    任何问题,请尽管提问。

    【讨论】:

    • 嗨拉努,感谢您的帮助。你也可以帮忙吗。作为数字 123.45,我以它为例。我将获得的数字来自一个字段,长度和数字会有所不同。有什么地方可以让我从需要的字段中拨打电话号码吗?
    • @J.Ngo 不客气。您在这里有几个答案,因此请确保您将提供给您答案的答案作为解决方案,并投票支持任何帮助您实现目标的答案。 :)
    • @J.Ngo 只需使用 的(不是字段的)名称而不是文字值。 IE。 SELECT [YourColumn] * 10000;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 2016-05-03
    • 1970-01-01
    • 2014-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多