두 날짜를 비교하려고 할 때 오류가 발생하는 redshift에서 실행중인 쿼리가 있습니다. 날짜가 VARCHAR이고 일부가 빈 문자열 인 데이터 문제로 인한 것입니다. 가장 좋은 해결책은이 문제를 근원지에서 해결하는 것이 분명하지만, 해결 방법을 시도하는 중에 아주 이상한 행동을 발견하게됩니다.Redshift에서 잘못된 데이터 오류가 발생했습니다
주위를 돌아 다니려면 빈 문자열이 아닌 날짜를 사전 선택하고 날짜로 형변환 한 다음 정수 날짜 형식 (YYYYMMDD)으로 변환하고 INT로 변환하십시오. 이것은 잘 실행됩니다. 그러나 WHERE 절의 정수와이 값을 비교하려고하면 쿼리가 데이터 형식 오류와 충돌합니다. 여기
이SELECT
date_id,
COUNT(*)
FROM
(
SELECT
CONVERT(int, date_id) AS date_id
FROM
(
SELECT
DATE_PART('year', start_dttm)*10000+DATE_PART('month', start_dttm)*10+DATE_PART('day', start_dttm) AS date_id
FROM
(
SELECT
CAST(start_dttm AS DATETIME) AS start_dttm
FROM
sfe.calendar_detail
WHERE
start_dttm <> ''
) cda
) cdb
) cd
WHERE
date_id >= 20170920
GROUP BY
date_id
;
내가 위에서 언급 한 바와 같이 실패한 쿼리 작업 쿼리 여기
SELECT
date_id,
COUNT(*)
FROM
(
SELECT
CONVERT(int, date_id) AS date_id
FROM
(
SELECT
DATE_PART('year', start_dttm)*10000+DATE_PART('month', start_dttm)*10+DATE_PART('day', start_dttm) AS date_id
FROM
(
SELECT
CAST(start_dttm AS DATETIME) AS start_dttm
FROM
sfe.calendar_detail
WHERE
start_dttm <> ''
) cda
) cdb
) cd
GROUP BY
date_id
;
과의 장난감 버전입니다, 올바른 솔루션은 데이터 형식을 수정하고 빈 계산하는 것입니다 날짜는 Nulls가 아닌 빈 문자열이지만, 두 번째 쿼리가 잘못된 데이터 형식 오류로 인해 충돌하는 이유에 대해 매우 궁금합니다.
많은 감사!
편집 : 다음은 오류
ERROR: Invalid digit, Value '1', Pos 0, Type: Integer
DETAIL:
-----------------------------------------------
error: Invalid digit, Value '1', Pos 0, Type: Integer
code: 1207
context:
query: 2006739
location: :0
process: query0_39 [pid=0]
-----------------------------------------------
@ 500-InternalServerError 가장 큰 값은 99991231이며 redshift doc 사이트의 최대 값보다 적습니다. 2147483647 – lucas