우리 쿼리 중 하나에 이상한 문제가 있습니다. 다음은 아래의 테이블에 존재하는 샘플 데이터를 우리가데이터 값 "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 |
생년월일은 YYYYMMDD
형식으로 bigint에 저장됩니다. 데이터에 0, 51015와 같이 날짜가 유효하지 않은 행이 있습니다. 경우에 따라이 쿼리를 실행하면 다음 오류가 발생합니다.
그러나 이상한 점은 모든 시간이 아닌 임의로 오류가 발생한다는 것입니다. 여러 번 쿼리 나 데이터 집합을 변경하지 않고도 작동합니다. 가끔 두 번째 또는 세 번째 시도에서도 작동합니다. 의심되는 점은 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' 절을 사용할 수 있다고 생각합니다. 예 : 'WITH temp AS (SELECT getdate() :: date - date_value :: date를 diff FROM tablename으로 사용)에서 열을 선택하십시오. – jimy