在雪花中如何获取我想要的日期格式在雪花中

问题描述

从雪花表中检索年份时,我一直在面对这个问题。

我的表的值如下:

// Code 2

我需要将值设置为 2020-10-02 。当我使用year :20 day:10 month :02 时,我得到了预期的结果,但是用 00 填充的dob就像 0020-10-02 一样打印。

此外,当年份列中有 99 时,则在检索时应显示 1999

我创建了如下查询:

concat_ws

建议我是否还有功能。

解决方法

看看这个

YY

Two-digit year,controlled by the TWO_DIGIT_CENTURY_START session parameter,e.g. when set to 1980,values of 79 and 80 parsed as 2079 and 1980 respectively.

select TO_DATE('99-10-02','YY-MM-DD');
,

如果您的某些用户年龄很小,而另一些用户年龄很大,则无法自动显示“正确的”年份,那么您如何确定该人出生于20世纪或21世纪呢?

我不太了解您的数据的存储方式,因此我将假定为json结构,因为它会出现在您的查询中。

set json = '{
    "elements": [{
        "year": "01","month": "02","day": "10"
    },{
        "year": "99",{
        "year": "20","day": "10"
    }]
}'::varchar;

现在,我将解析json,提取值,然后将其放在此处,以便确保我们具有相同的数据结构。

CREATE OR REPLACE TEMP TABLE test AS
select t2.VALUE: day::varchar   dob_day,t2.VALUE: month::varchar dob_month,t2.VALUE: year::varchar  dob_year
from (select parse_json($json) as json) t,lateral flatten(input => parse_json(t.json),path => 'elements') t2

现在是会让您感兴趣的部分。这是一个肮脏的把戏,并假定如果两位数字年份高于当前的两位数字年份,则它不能是2000,而应该是1900。

SELECT to_date(concat_ws('-',IFF(t2.dob_year > RIGHT(extract(year,current_timestamp),2),'19'||t2.dob_year,'20'||t2.dob_year ),t2.dob_month,t2.dob_day)) proper_date
FROM test t2;
,

to_date中的日期格式更改为'YY-MM-DD'应该会给您想要的DOB,如果您怀疑数据有问题,我建议使用try_to_date,因为它会NULL该字段(如果不是有效日期)。

注意(如果您使用的是美国格式),则使用YY-DD-MM(月底)

select to_date('concat_ws('-',json:year::varchar,json:month::varchar,json:date::varchar)','YY-MM-DD') from XXX;

此外,如果您想安全地检查DOB是否将来出现,请按如下所示添加IFF

IFF(CURRENT_DATE > to_date('concat_ws('-','YY-MM-DD'),to_date('concat_ws('-',NULL);

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...