sql - 数据值 "0"在 redshift 中有无效格式错误

标签 sql postgresql amazon-web-services amazon-redshift

我们的一个查询遇到了一个奇怪的问题。 下面是我们正在运行的查询

INSERT into test 
SELECT 
    member.name as mem_name, 
    CASE WHEN ( member.dob>0 AND length (member.dob)=8 ) THEN (DATEDIFF(year,to_date("dob",'YYYYMMDD'), to_date(20140716,'YYYYMMDD'))) WHEN ( member.dob=0 ) Then 0 END As Age, 
    20140716021501 
FROM 
    member 

下面是我们表中的示例数据。

|name           |dob
|Ajitsh         |0        |
|rk             |51015    |
|s_thiagarajan  |19500130 |
|madhav_7       |19700725 |
|1922           |0        |
|rekha          |25478    |
|vmkurup        |0        |
|ravikris       |19620109 |
|ksairaman      |0        |
|sruthi         |0        |
|rrbha          |19630825 |
|sunilsw        |0        |
|sunilh         |0        |
|venky_pmv      |19701207 |
|malagi         |0        |
|an752001       |0        |
|edsdf          |19790201 |
|anuanand       |19730724 |
|fresh          |19720821 |
|ampharcopharma |19590127 |
|Nanze          |19621123 |

出生日期以 YYYYMMDD 格式存储在 bigint 中。 在数据中有一些行,其中日期无效,如 0、51015。 在某些情况下,此查询会引发以下错误。

INSERT INTO test not successful
An error occurred when executing the SQL command:
INSERT into test 
SELECT 
    member.name as mem_name, 
    CASE WHEN ( member.dob>0 AND length (member.dob)=8 ) THEN (DATEDIFF(y...

ERROR: Data value "0" has invalid format
    Detail: 
    -----------------------------------------------
    error:  Data value "0" has invalid format
    code:      1009
    context:   PG ERROR
    query:     92776
    location:  pg_utils.cpp:2731
    process:   query1_30 [pid=1434]
    -----------------------------------------------


Execution time: 3.99s

1 statement failed.

但奇怪的是,它会随机出现错误,而不是一直出现。 很多时候它在查询或数据集没有任何变化的情况下工作。 有时它也适用于第二次或第三次尝试。 我怀疑是 to_date 函数给出了这个错误。但为什么随机 并且不会在每次运行时都出错。

为了支持我的假设,我还尝试了这个小查询。
SELECT to_date(20140716,'YYYYMMDD'), to_date(0,'YYYYMMDD');
但这也造成了同样的情况。它随机引发错误,而 其余时间运行平稳。

最佳答案

如果可以忽略这种类型的值并将其转换为 Date 格式,您可以按照以下方式操作。

SELECT to_date('20140716','YYYYMMDD'), to_date('0','FMYYYYMMDD');

此处 FM 抑制了前导零和尾随空白,否则这些空白将被添加以使模式的输出为固定宽度。

关于sql - 数据值 "0"在 redshift 中有无效格式错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24886746/

相关文章:

reactjs - AWS ELB 为 https ://domain_name:8000 but accessible via public_ip:8000 返回 404

sql - 当有一组时,将多行合并为一行

sql - 甲骨文数据透视 : from rows into columns

mysql - SQL最大记录数

django - 当某些操作需要以快于 O(n) 的时间执行时,如何存储数据结构?

python - 如何使用 SQLAlchemy 和 contains_eager 中关系上定义的 order_by?

security - 阻止 Elastic Load Balancer 泄露内部私有(private) IP

sql - 使用 MS SQL Server 根据项目顺序和父类别顺序对项目进行排序

sql - 我需要什么隔离级别来保持这些不变量?

amazon-web-services - 适用于多种文件类型的AWS Cloudfront路径模式