繁体   English   中英

使用 TO_DATE 将 VARCHAR 转换为日期

[英]Converting VARCHAR to Date using TO_DATE

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

但我收到错误“无法将 '' 解析为格式为 'yyyymmdd' 的日期”。

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

只需使用TRY_TO_DATE ,它就会为无法解析输入的值返回 NULL 。

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

TO_DATE(TO_CHAR(datekey),'yyyymmdd')

听起来您的某些 col4 条目是 NULL 或空字符串。 试试吧

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

只选择有效的输入。 需要明确的是,如果您将格式设置为“YYYYMMDD”(您应该使用大写),则 col4 中的条目必须类似于“20190522”。

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

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

创建或替换表 df_new AS SELECT ,col1 AS NAME ,col2 AS first_name ,col3 AS last_name ,CASE WHEN "col4" = '' then NULL ELSE TO_DATE(col4, 'YYYYMMDD') AS date from 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM