概要
Oracle Database では文字型から Date 型へ変換する処理を Databricks に移行する際には、フォーマットを指定せずに変換可能なフォーマットが異なることに注意が必要です。
Oracle では、yyyy-MM-dd
、yyyyMMdd
、および、yyyy/MM/dd
にいずれの日付形式でも data 型に変換ができます。
それに対して、Databricks では、yyyy-MM-dd
の日付形式でのみ data 型に変換ができます。
よって、Oracle Database では文字型から Date 型へ変換する処理を Databricks に移行する際には、フォーマットを明示する必要があるケースがあることに注意が必要です。仕様確認のコードと対応方法のコードを共有します。
仕様確認と対応方法
Oracle Dataabse の仕様確認
WITH src AS (
SELECT
'2020-01-01' AS "date_str_yyyy-mm-dd"
,'20200102' AS "date_str_yyyymmdd"
,'2020/01/03' AS "date_str_yyyy/mm/dd"
FROM
dual
)
SELECT
"date_str_yyyy-mm-dd" AS date_str
,CAST("date_str_yyyy-mm-dd" AS date) date_col
FROM
src
UNION ALL
SELECT
"date_str_yyyymmdd"
,CAST("date_str_yyyymmdd" AS date) date_col
FROM
src
UNION ALL
SELECT
"date_str_yyyy/mm/dd"
,CAST("date_str_yyyy/mm/dd" AS date) date_col
FROM
src
Database の仕様確認
%sql
WITH src AS (
SELECT
'2020-01-01' AS `date_str_yyyy-mm-dd`
,'20200102' AS `date_str_yyyymmdd`
,'2020/01/03' AS `date_str_yyyy/mm/dd`
)
SELECT
`date_str_yyyy-mm-dd` AS date_str
,CAST(`date_str_yyyy-mm-dd` AS TIMESTAMP) date_col
FROM
src
UNION ALL
SELECT
`date_str_yyyymmdd`
,CAST(`date_str_yyyymmdd` AS TIMESTAMP) date_col
FROM
src
UNION ALL
SELECT
`date_str_yyyy/mm/dd`
,CAST(`date_str_yyyy/mm/dd` AS TIMESTAMP) date_col
FROM
src
;
Databricks での対応方法
%sql
WITH src AS (
SELECT
'2020-01-01' AS `date_str_yyyy-mm-dd`
,'20200102' AS `date_str_yyyymmdd`
,'2020/01/03' AS `date_str_yyyy/mm/dd`
)
SELECT
`date_str_yyyy-mm-dd` AS date_str
,CAST(`date_str_yyyy-mm-dd` AS date) date_col
FROM
src
UNION ALL
SELECT
`date_str_yyyymmdd`
,try_to_timestamp(`date_str_yyyymmdd`, 'yyyyMMdd') date_col
FROM
src
UNION ALL
SELECT
`date_str_yyyy/mm/dd`
,try_to_timestamp(`date_str_yyyy/mm/dd`, 'yyyy/MM/dd') date_col
FROM
src
;