Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Snowflake cloud data platform 使用to_Date将VARCHAR转换为Date_Snowflake Cloud Data Platform - Fatal编程技术网

Snowflake cloud data platform 使用to_Date将VARCHAR转换为Date

Snowflake cloud data platform 使用to_Date将VARCHAR转换为Date,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我有一组数据,其中col是VARCHAR(),但我需要它是日期格式 我试着按如下方式做: 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 CREATE OR REPLACE TABLE df_new AS SELECT col1 AS NAME ,col

我有一组数据,其中col是VARCHAR(),但我需要它是日期格式

我试着按如下方式做:

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
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
但我收到一个错误“无法将“”解析为格式为'yyyymmdd'的日期”


我尝试过修改日期格式的输入(例如'yyyy/mm/dd'),但我对SQL非常陌生,因此我不确定如何继续。

听起来有些col4条目是空字符串或空字符串。试试看吧

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

仅选择有效输入。为了清楚起见,如果您将格式设置为“YYYYMMDD”(您应该使用大写),col4中的条目必须看起来像“20190522”。

仅使用,对于无法解析输入的值,它将返回NULL。

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

我可以通过以下方法解决:

创建或替换表格df_new 作为选择 ,col1作为名称 ,col2作为名字 ,col3作为姓氏 ,当“col4”=”时为大小写,然后将ELSE设置为NULL,以_DATE(col4,'yyyyymmdd')作为日期
从df_old

我解决了以下问题:

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
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以外的所有值都是字符串“yyyyymmdd”,那么以下内容将在snowflake中使用

TO_DATE(TO_CHAR(datekey),'yyyymmdd')

我认为您100%正确地解释了为什么我收到的错误是确实存在的空值。现在添加REGEXP_LIKE时的问题是行中没有填充任何内容。我会继续捣乱的。谢谢你的帮助!啊,对不起,我使用Oracle语法有点仓促,如果你在Postgres上,你会想使用~operator。Snowflake是一个与PostgreSQL截然不同的DBMS产品。你到底在用哪一个?Postgres中没有
创建或替换表
,所以显然是雪花而不是Postgressory,你是对的。作业上说它就像PostgreSQL。我误解了这一点。