gpt4 book ai didi

sqlite - 如何在 SQLite 中格式化 float ?

转载 作者:行者123 更新时间:2023-12-03 19:20:20 27 4
gpt4 key购买 nike

在 SQLite 中,我需要格式化一个数字以使用千位分隔符和小数分隔符显示它。示例:数字 123456789 应显示为 1,234,567.89
我所做的部分有效,因为它没有像我预期的那样显示千位分隔符:

select *, printf ("U$%.2f", CAST(unit_val AS FLOAT) / 100) AS u_val FROM items;
u_val 显示: U$1234567.89 但我需要 U$1,234,567.89

最佳答案

以下是您可以实现结果的一种方式:-

select *, printf ("U$%.2f", CAST(unit_val AS FLOAT) / 100) AS u_val FROM items;
可能变成:-
SELECT 
*,
CASE
WHEN len < 9 THEN myfloat
WHEN len> 8 AND len < 12 THEN substr(myfloat,1,len - 6)||','||substr(myfloat,len - 5)
WHEN len > 11 AND len < 15 THEN substr(myfloat,1,len -9)||','||substr(myfloat,len-8,3)||','||substr(myfloat,len-5)
WHEN len > 14 AND len < 18 THEN substr(myfloat,1,len - 12)||','||substr(myfloat,len -11,3)||','||substr(myfloat,len-8,3)||','||substr(myfloat,len-5)
END AS u_val
FROM
(
SELECT *, length(myfloat) AS len
FROM
(
SELECT *,printf("U$%.2f",CAST(unit_val AS FLOAT) / 100)) AS myfloat
FROM Items
)
)
最里面的 SELECT 提取原始数据以及根据原始 SELECT 的新列。
中间 SELECT 为从 派生的新列的长度添加另一列。 unit_val 通过 printf(这可以在第一个/最里面的 SELECT 中完成,获得这个值简化了(在我看来)最外面的 SELECT,或者您可以在最外面的 SELECT 中使用多个 length(myfloats))。
结果 - 示例
以下是测试的结果(源列是 myfloat ):-
enter image description here
  • 突出显示的列是原始列。
  • 圈出的数据就是结果。
  • 其他 2 列是中间列。

  • 编辑
    正如你已经澄清输入是一个整数,然后: -
    SELECT *,'U$'||printf('%,d',(unit_val/100))||'.'||CAST((unit_val % 100) AS INTEGER) AS u_val FROM Items
    假设您至少使用 3.18 版的 SQLite。
    更正
    如果最后一部分(美分)的值小于 10,则直接使用上面的 SQL,则删除前导 0。所以正确的 SQL 是。为简单起见,请注意 CAST 也已被删除,而不是连接 . 它已添加到 printf格式化字符串所以:-
    SELECT 
    'U$' ||
    printf('%,d', (unit_val / 100)) ||
    printf('.%02d',unit_val % 100)
    AS u_val
    FROM Items
    或者作为单行
    SELECT 'U$' || printf('%,d', (unit_val / 100)) || printf('.%02d',unit_val % 100) AS u_val FROM Items

    关于sqlite - 如何在 SQLite 中格式化 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48716160/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com