将货币价值 - 欧分转换为四舍五入的欧元

时间:2021-02-20 07:54:16

标签: sql sql-server currency data-conversion

应用程序以欧分将数据导出到我的 DWH。我需要通过四舍五入将这些值转换为欧元。欧分数据格式为int

以下是表格中的数据示例:

  CustID   Money   Date
  ===========================
  1        148180  2021-02-10
  2        520     2021-02-11
  3        50      2021-02-11
  4        25      2021-02-12

好吧,我们知道的 Money 列是以欧分为单位的,这意味着 CustID 将四舍五入到正确的值:

  1 - 1482 
  2 - 5,2 
  3 - 0.5 
  4 - 0.3 

重点是,当Money列中的值只有Eurocents时,比如CustID 3或4的情况,我也必须显示这个值,而不仅仅是没有小数点的数字.所以我需要将此列的转换设置为两位小数。您有什么建议吗?

编辑

我尝试过类似的方法,但结果是 1,481,四舍五入且没有两位小数。

SELECT CONVERT(varchar, CAST(148180/100 AS money), 1)

2 个答案:

答案 0 :(得分:2)

您可以通过除以 100 从欧分转换为欧元。使用 100.0 以避免在 SQL Server 中进行整数除法。

您使用 CEILING 向上舍入到下一个整数。

现在是显示格式。你想要两位小数。但是,数字没有特定的小数位数。数字 1.2 与 1.20 相同,但仍与 SQL Server 数据库中的 1.20000 相同。

如果你想以某种格式显示一个数字,你需要一个函数将数字转换成一个带有所需小数位的字符串,与你的文化(逗号或点)相匹配的十进制字符等。这个函数是 FORMAT

select custid, format(ceiling(money / 100.0), 'N2') as euros
from mytable;

格式 'N2' 只是一个例子。您当然可以使用不同的格式。在此处阅读:https://docs.microsoft.com/de-de/sql/t-sql/functions/format-transact-sql?view=sql-server-ver15 和此处:https://docs.microsoft.com/de-de/dotnet/standard/base-types/standard-numeric-format-strings

演示:https://dbfiddle.uk/?rdbms=sqlserver_2019&fiddle=8ce85ce73e624d2b6bf9426b410be0fd

答案 1 :(得分:1)

对于带有数字的输出:分频器值必须包含十进制或浮点数,您可以这样尝试吗?

SELECT REPLACE(CONVERT(varchar(20), (CAST(148100/100.00 AS money)), 1), '.00', '')