使用 TO_DATE 将 VARCHAR 转换为日期

Converting VARCHAR to Date using TO_DATE

我有一组数据,其中列为 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

但我收到一个错误 "Can't parse '' as date with format 'yyyymmdd'"。

我试过弄乱日期格式的输入(例如 'yyyy/mm/dd'),但我对 SQL 很陌生,所以我不确定如何继续。

听起来您的一些 col4 条目是 NULL 或空字符串。也许试试

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

到select只有有效的输入。需要明确的是,如果您将格式设置为 'YYYYMMDD'(您应该使用大写字母),则 col4 中的条目必须看起来像“20190522”。

只需使用 TRY_TO_DATE,对于无法解析输入的值,它将 return NULL。

所有日期都以内部格式存储。 您无法影响日期的存储方式。但是,当您通过查询从数据库中提取数据时,您可以按照您想要的方式对其进行格式化。

我能够通过以下方式解决:

创建或替换 TABLE df_new 作为 SELECT ,col1 作为名称 ,col2 AS first_name ,col3 AS last_name ,CASE WHEN "col4" = '' then NULL ELSE TO_DATE(col4, 'YYYYMMDD') AS date 来自 df_old

我按如下方式解决了这个问题:

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

如果您确定除 NULL 之外的所有值都是字符串 'yyyymmdd',那么以下内容将适用于 snowflake。

TO_DATE(TO_CHAR(datekey),'yyyymmdd')