我們正在面對我們的查詢中的一個奇怪問題。 下面是我們運行數據值「0」在紅移中的格式錯誤無效
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_Watcher,我沒有得到滿意的答案。一種解決方法,我認爲你可以使用'WITH'子句。例如'與溫度AS(選擇getdate()::日期 - 日期值::日期爲差異從表名)選擇列從臨時WHERE diff <= 90'。 – jimy