【问题标题】:Conversion issue from string to decimal in redshift红移中从字符串到十进制的转换问题
【发布时间】:2019-12-06 16:09:43
【问题描述】:

在红移表中加载数据时出现以下错误。 源列的数据类型为字符串,目标的数据类型为十进制(7,2)。

来源样本记录:-

TOTAL_HOURS | REGULAR_HOURS
30.299997   | 30.299997
28.25       | 27.75
2.566666    | 2.566666

错误:-

SQL 错误 [500310] [XX000]:Amazon 无效操作:数值数据溢出(结果精度)

我正在尝试的查询:- 我尝试了许多选项,但是我不断收到上述错误。我尝试过的几个查询是:-

1).

INSERT INTO schema.target_tbl 
SELECT  to_number(Total_hours ,'9999D99')  As Total_hours,
    to_number(Regular_hours ,'9999D99')  As Regular_hours,
FROM schema.source_tbl

2).

INSERT INTO schema.target_tbl 
SELECT
cast(Total_hours As float) As Total_hours,
cast(Regular_hours As float) As Regular_hours,

3).

INSERT INTO schema.target_tbl 
SELECT
cast(cast(Total_hours As Float) As decimal(7,2)) As Total_hours,
cast(cast(Regular_hours As Float) as  decimal(7,2)) As Regular_hours,

【问题讨论】:

    标签: sql type-conversion amazon-redshift


    【解决方案1】:

    根据decimal(precision,scale) 的亚马逊文档,您的记录规模似乎是8,6,您正在查询7,26,2(?)。

    【讨论】:

    • 是的,我知道。我正在尝试将字符串格式的数字从 8,6 转换为 7,2,但我没有成功。你知道怎么做吗?
    【解决方案2】:

    我创建了两个表,和你的一样:

    create table decimal_test1(val varchar);
    create table decimal_test2(val DECIMAL(7,2));
    
    insert into decimal_test1 values('30.299997');
    
    insert into decimal_test2 select val from decimal_test1; --works
    insert into decimal_test2 select to_number(val ,'9999D99') from decimal_test1; --also works
    

    最后两个查询都给出了预期的结果并将数据插入到表中。

    【讨论】:

    • 感谢 Yankee 的回复。你说的对 。我遇到了导致此问题的数据问题。我怀疑这是转换问题,但事实并非如此。
    猜你喜欢
    • 2015-05-22
    • 1970-01-01
    • 2023-03-03
    • 2023-02-08
    • 2020-02-19
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 2013-09-05
    相关资源
    最近更新 更多