后Ql插入小数的值



请帮助我如何在PostgreSQL 45.000.00上以这种格式插入此值我已经配置了一个Colum数字10的长度和2个精度,但仅保存值> 999.99

数字存储,没有任何"格式"。您只需将它们插入有效的SQL编号常数即可。

如果您想具有特定格式,则在显示的值时应用:

create table jorge (n numeric(10,2));
insert into jorge values (4500000);

在SQL中,小数值只能包含单个.确实标记了小数。例如3.14123.42

45.000.00无效 SQL中小数点的常数(您将在第二个点上获得语法错误:

postgres=> select 45.000.00;
ERROR:  syntax error at or near ".00"
LINE 1: select 45.000.00;
                     ^
postgres=>

要按照您想要的方式显示它,请使用to_char()

select to_char(n, '00G000G00')
from jorge;

现在使用的组分离器取决于您的lc_numeric设置:

postgres=> set lc_numeric TO 'en';
SET
postgres=> select to_char(n, '00G000G00')
postgres-> from jorge;
  to_char
------------
  45,000,00
(1 row)

postgres=> set lc_numeric TO 'de';
SET
postgres=> select to_char(n, '00G000G00')
postgres-> from jorge;
  to_char
------------
  45.000.00
(1 row)

但最好在应用程序中进行此类格式,而不是在SQL查询中进行此类格式。

如果您的问题是将'45.000.00'等输入字符串转换为numeric(10,2),则解决方案是使用正则表达式:

SELECT regexp_replace('45.000.00', '.(?=[^.]{3})', '', 'g')::numeric(10,2);
┌────────────────┐
│ regexp_replace │
├────────────────┤
│       45000.00 │
└────────────────┘
(1 row)

最新更新