【问题标题】:Invalid digits on RedshiftRedshift 上的无效数字
【发布时间】:2018-08-28 13:42:04
【问题描述】:

我正在尝试将一些数据从阶段加载到关系环境中,但发生了一些我无法弄清楚的事情。

我正在尝试运行以下查询:

SELECT
  CAST(SPLIT_PART(some_field,'_',2) AS BIGINT) cmt_par
FROM
  public.some_table;

some_field 是一列,其中包含两个数字并用下划线连接的数据,如下所示:

some_field -> 38972691802309_48937927428392

我正在尝试获得第二部分。

也就是说,这是我得到的错误:

[Amazon](500310) Invalid operation: Invalid digit, Value '1', Pos 0, 
Type: Long 
Details: 
 -----------------------------------------------
  error:  Invalid digit, Value '1', Pos 0, Type: Long 
  code:      1207
  context:   
  query:     1097254
  location:  :0
  process:   query0_99 [pid=0]
  -----------------------------------------------;

Execution time: 2.61s
Statement 1 of 1 finished

1 statement failed.

字面意思是有些数字不是有效数字。我已经尝试获取引发错误的确切数据,它似乎是一个正常的字段,就像我期望的那样。即使我抛出 NULL 字段也会发生这种情况。

我认为这将是一个编码错误,但我没有找到任何参考来解决这个问题。 有人知道吗?

谢谢大家。

【问题讨论】:

    标签: sql database amazon-redshift


    【解决方案1】:

    我刚刚遇到了这个问题并进行了一些挖掘。似乎错误Value '1' 是误导部分,问题实际上是这些字段作为数字无效。

    在我的情况下,它们是空字符串。我在this blogpost 中找到了我的问题的解决方案,它本质上是找到任何不是数字的字段,并在转换之前用 null 填充它们。

    select cast(colname as integer) from
    (select
     case when colname ~ '^[0-9]+$' then colname
     else null
     end as colname
     from tablename);
    

    底线:这个 Redshift 错误完全令人困惑,确实需要修复。

    【讨论】:

    • 警告:^$ 匹配 的开头和结尾。所以,如果你有一个像多行地址这样的值,上面的正则表达式可以匹配非数字值。为避免这种情况,请使用 !~ '[^0-9]' 而不是 ~ '^[0-9]+$'
    • @KevinBorders 好点。在我的例子中,目标是找到不是数字的字段。
    【解决方案2】:

    嗯。我将从调查问题开始。有非数字字符吗?

    SELECT some_field
    FROM public.some_table
    WHERE SPLIT_PART(some_field, '_', 2) ~ '[^0-9]';
    

    bigint 的值是否太长?

    SELECT some_field
    FROM public.some_table
    WHERE LEN(SPLIT_PART(some_field, '_', 2)) > 27
    

    如果您需要超过 27 位的精度,请考虑使用 decimal 而不是 bigint

    【讨论】:

    • 两个查询返回空。所有字符都是数字,最大的数字有 17 位。这就是为什么我正在考虑编码,但即使它对我来说也没有任何意义。
    • @MaurícioBorges 。 . .这很好奇。
    【解决方案3】:

    投射后,错误消失了 - CAST(COLUMN1 as char(xx)) =CAST(COLUMN2 as char(xxx))

    【讨论】:

      猜你喜欢
      • 2019-06-06
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-26
      • 1970-01-01
      • 2022-01-24
      • 1970-01-01
      相关资源
      最近更新 更多