我有一個查詢,我在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
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
WHERE
date_id >= 20170920
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