Преобразование VARCHAR в Date с использованием TO_DATE - PullRequest
1 голос
/ 22 мая 2019

У меня есть набор данных, где col - это VARCHAR (), но мне нужно, чтобы он был в формате DATE.

Я пытался сделать это следующим образом:

CREATE OR REPLACE TABLE df_new
    AS SELECT
col1 AS NAME
col2 AS first_name
col3 AS last_name
,TO_DATE(col4, 'yyyymmdd') AS date
FROM df_old

, но я получаю сообщение об ошибке «Не удается разобрать» как дату в формате «ггггммдд».

Я пытался связываться с вводом для формата даты (например, «гггг / мм / дд»), но я довольно плохо знаком с SQL, поэтому не уверен, как поступить.

Ответы [ 5 ]

1 голос
/ 23 мая 2019

Просто используйте TRY_TO_DATE, он вернет NULL для значений, где он не может проанализировать ввод.

0 голосов
/ 28 мая 2019

Я решил проблему следующим образом:

CREATE OR REPLACE TABLE df_new
    AS SELECT
col1 AS NAME
,col2 AS first_name
,col3 AS last_name
,CASE WHEN col4 = '' THEN NULL ELSE TO_DATE(col4, 'YYYY-MM-DD') END AS date
FROM df_old
0 голосов
/ 23 мая 2019

Я смог разрешить следующее:

СОЗДАТЬ ИЛИ ЗАМЕНИТЬ СТОЛ df_new КАК ВЫБРАТЬ , col1 КАК ИМЯ , col2 AS first_name , col3 AS фамилия , CASE, КОГДА "col4" = '' затем NULL ELSE TO_DATE (col4, 'YYYYMMDD') как дата ОТ df_old

0 голосов
/ 23 мая 2019

Все даты хранятся во внутреннем формате. Вы не можете влиять на то, как дата хранится. Однако вы можете отформатировать его так, как вам нужно, когда вы извлекаете данные из базы данных с помощью запроса.

0 голосов
/ 22 мая 2019

Похоже, что некоторые из ваших записей col4 имеют значение NULL или пустые строки.Попробуйте

... FROM df_old WHERE col4 ~ '[0-9]{8}'

, чтобы выбрать только допустимые входы.Для ясности, если вы зададите формат «ГГГГММДД» (вы должны использовать верхний регистр), запись в столбце col4 должна выглядеть как «20190522».

...