SELECT to_date(substring(data,126,8), 'YYYYMMDD'),
to_date(substring(data,185,8), 'YYYYMMDD'),
to_date(substring(data,193,8), 'YYYYMMDD'),
to_date(substring(data,201,8), 'YYYYMMDD'),
to_timestamp(substring(data,31,19), 'YYYY-MM-DDBHH:MI:SS')
FROM temp_table
WHERE substring(data,74,2)='H1';
这是mload中出现错误的代码
ERROR: source string too short for "YYYY" formatting field
DETAIL: Field requires 4 characters, but only 0 remain.
HINT: If your source string is not fixed-width, try using the "FM" modifier.
答案 0 :(得分:0)
最容易解释错误的原因是子字符串与有效日期不匹配-例如,您认为您的子字符串返回“ 20180716”,但不是。
您应该做的第一件事是检查“数据”字符串的格式,并确保日期和时间戳与您认为的相符-即,字符串中位置31的正好是19个字符吗?尝试选择您要转换的子字符串,并确保它与您期望的匹配。
但是,我会说你在这里的做法非常冒险。您是否100%肯定地表示字符串每次都将返回相同的值,并且所有日期都位于同一位置?我本来可以使用正则表达式提供一个替代示例,但是在不知道“数据”字符串是什么样的情况下,我无法验证答案。 样本“数据”字符串将有助于提供更好的解决方案。