我们遇到了一个奇怪的问题,与我们的查询有关。以下是我们运行的查询:
以下是我们表格中的示例数据。
出生日期以bigint格式存储,格式为
但奇怪的是,它会随机出现错误,而不是每次都出现。很多时候,即使查询或数据集没有任何改变,它也能正常工作。有时候,第二次或第三次尝试也可以正常工作。我怀疑是 to_date 函数导致了这个错误。但为什么会随机出错,而不是每次运行都会出错呢?
为了支持我的假设,我还尝试了这个小查询。
SELECT to_date(20140716,'YYYYMMDD'), to_date(0,'YYYYMMDD');
但这也会创建相同的情况。它会随机出现错误,而其他时间则顺利运行。
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 |
出生日期以bigint格式存储,格式为
YYYYMMDD
。
在数据中有一些行,其中日期无效,例如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');
但这也会创建相同的情况。它会随机出现错误,而其他时间则顺利运行。
WHERE (getdate()::date - date_value::date) <=90
操作,但返回的错误是“数据值....格式无效”。奇怪的是,getdate()::date - date_value::date
的使用效果如预期,但在 WHERE 中使用时会抛出错误。 - Moon_WatcherWITH temp AS (SELECT getdate()::date - date_value::date as diff FROM tablename) SELECT columns FROM temp WHERE diff <=90
。 - jimy