请帮助我如何在PostgreSQL 45.000.00上以这种格式插入此值我已经配置了一个Colum数字10的长度和2个精度,但仅保存值> 999.99
数字存储,没有任何"格式"。您只需将它们插入有效的SQL编号常数即可。
如果您想具有特定格式,则在显示的值时应用:
create table jorge (n numeric(10,2));
insert into jorge values (4500000);
在SQL中,小数值只能包含单个.
确实标记了小数。例如3.14
或123.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)