暂无图片
暂无图片
3
暂无图片
暂无图片
2
暂无图片

实测: Vertica 与 WutongDB 函数对比测试之 _ 日期时间函数函数篇

原创 千钧 2024-10-16
260

测试环境:

  • Vertica: Vertica Analytic Database v11.1.1-22

  • WutongDB: V5.4.10.0

1. add_months

  • 功能说明:

    add_months(date, integer) 函数用于将指定的月份数加到给定的日期上,返回一个新的日期。这在日期计算中非常有用,尤其是需要计算从某个日期起几个月后的日期。

  • 测试语句:

    select to_char( add_months(to_date('202403', 'yyyymm'), -12), 'yyyymm' );
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    202303
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库在显示无此函数,如下图所示:

    function add_months(date, date) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    • Wutong DB 5.4Wutong DB 6 都不提供 add_months 函数,可以使用以下方法:

      SELECT date '2024-03-01' + INTERVAL 'n months';
      复制
    • 函数说明:

      • INTERVAL 'n months':在日期上加上或减去指定的月份数。

2. age_in_months

  • 功能说明:

    age_in_months(date1, date2) 函数用于计算两个日期之间的月份差异。该函数通常用于计算日期跨度,以月为单位。

  • 测试语句:

    select a.*, b.sett_money, case when age_in_months(date('now'), date(expire_date)) > 0 then age_in_months(date('now'), date(expire_date)) * 10.00 else null end from gs_test.test_function_add_months01 a left join ( select distinct serv_number, channel_id, offer_id, sett_money from gs_test.test_function_add_months02 ) b on a.serv_number = b.serv_number and a.create_org_id = b.channel_id and a.offer_id = b.offer_id order by serv_number, user_id, offer_ins_id, offer_id;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    age_in_months_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库在显示无此函数,如下所示:

    function age_in_months(date, date) does not exist
    
    复制
  • Wutong DB 5.4 替代方案:

    • Wutong DB 5.4 中,可以使用 AGE() 函数来计算日期之间的差异,返回以年和月为单位的时间差:

      SELECT EXTRACT(YEAR FROM AGE(date1, date2)) * 12 + EXTRACT(MONTH FROM AGE(date1, date2));
      复制
  • Wutong DB 6 替代方案:

    • Wutong DB 6 同样可以使用 AGE() 函数:

      SELECT EXTRACT(YEAR FROM AGE(date)) AS years;
      复制

3. age_in_years

  • 功能说明:

    age_in_years(date) 函数用于计算从指定日期到当前日期之间的年数。该函数通常用于计算年龄。

  • 测试语句:

    select age_in_years('1939-11-21'::DATE);
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    84
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库在显示无此函数,如下所示:

    function age_in_years(date) does not exist
    
    复制
  • Wutong DB 替代方案:

    • 请参考 age_in_months 的解决替代方案

4. clock_timestamp

  • 功能说明:

    clock_timestamp() 函数返回当前的日期和时间,包括时区。与 current_timestamp 不同的是,clock_timestamp 每次调用时都会返回不同的值,即使在同一个查询中。

  • 测试语句:

    select clock_timestamp() "current time";
    复制
  • Vertica 输出结果:

    输出结果如下所示:

    2024/6/17 17:35:25
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出如下所示:(与 Vertica 的展示格式不同)

    2024-06-17 17:35:34.900274+08:00
    
    复制

5. current_date

  • 功能说明:

    current_date 函数返回当前的日期(不包括时间部分)。这是获取当前日期的快捷方式。

  • 测试语句:

    select distinct user_id, serv_number from gs_test.test_function_current_date where user_status in ('1', '2', '3', '6') --and current_date()-join_date <= 180 -- 近 6 个月 order by user_id, serv_number;
    复制
  • Vertica 输出结果:

    在 vertica 中可以执行,如下图所示:

    current_date_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出显示错误,如下所示:

    syntax error at or near "(" ----------------------------------------------------------------- -- 单独执行 select current_date(); 报错: syntax error at or near "(" -- 去掉括号可以正常执行
    复制

6. current_time

  • 功能说明:

    current_time(precision) 函数返回当前时间,精度由参数指定。它不包括日期部分。

  • 测试语句:

    select current_time(1);
    复制
  • Vertica 输出结果:

    在 vertica 中可以执行,如下图所示:

    17:37:38
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出如下所示:(与 Vertica 显示格式不同)

    17:37:35.9+08:00
    
    复制

7. current_timestmp

  • 功能说明:

    current_timestamp(precision) 函数返回当前的日期和时间,精度由参数指定。它包括时区信息。

  • 测试语句:

    select current_timestamp(1);
    复制
  • Vertica 输出结果:

    在 vertica 中可以执行,如下图所示:

    2024-06-17 17:38:55.900
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出如下所示:(与 Vertica 显示格式不同)

    2024-06-17 17:39:23.6+08:00
    
    复制

8. date_part

  • 功能说明:

    date_part(field, source) 函数用于从日期或时间戳中提取指定的部分(如年、月、日、小时等)。这是日期和时间操作中非常常用的函数。

  • 测试语句:

    select a.*, row_number() over ( partition by imei order by cur_gprs_gb desc ) rn -- 给终端按当月使用流量(由高到低)排序 from gs_test.test_function_date_part a where cur_gprs_gb >= round(16.7 * date_part('day', date(to_char(20240617))), 1) and a.statis_month = 202405;
    复制
  • Vertica 输出结果:

    在 vertica 中可以执行,如下图所示:

    date_part_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库在显示无此函数,如下图所示:

    pq: function round(double precision, integer) does not exist
    
    复制
    CREATE TABLE bdtmp.tb_tmp_user_traffic_anomaly_detection_model_tmp05 ( statis_month bigint, serv_number varchar(20), imei varchar(20), cur_gprs_gb numeric(72,54) ); -- 在梧桐数据库建表失败,报错: pq: ORC DECIMAL precision must be between 1 and 38 -- 另一种测试 select date_part('dow',current_date); 输出结果一致
    复制

9. date

  • 功能说明:

    date(expression) 函数用于将表达式转换为日期类型。它通常用于格式转换,确保数据类型一致性。

  • 测试语句:

    select case when a.up_area_code is null then '999' else a.up_area_code end, nvl(count(case when a.join_date>=(date(sysdate)-1) then a.user_id else null end),0), nvl(count(case when to_number(substr(to_char(a.join_date,'yyyymmdd'),1,6))>=to_number(substr(to_char(date(sysdate),'yyyymmdd'),1,6)) then a.user_id else null end),0), nvl(count(case when a.join_date>='2020-12-01' then a.user_id else null end),0) from gs_test.test_function_date a where data_flux>0 -- 剔除流量不活跃用户 group by rollup(a.up_area_code) order by a.up_area_code ;
    复制
  • Vertica 输出结果:

    在 vertica 中可以执行,如下图所示:

    date_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库在显示无此函数,如下图所示:

    column "sysdate" does not exist
    
    复制

    将 sysdate 改为 sysdate()后输出结果与 vertica 数据库输出结果一致

  • Wutong DB 5.4 替代方案:

    • 使用 CAST:: 操作符将字符串或其他表达式转换为日期:
    SELECT CAST(expression AS DATE); -- 或者 SELECT expression::DATE;
    复制
  • Wutong DB 6 替代方案:

    • Wutong DB 6 版本同样支持 CAST:: 操作符转换数据类型:
    SELECT CAST(expression AS DATE); -- 或者 SELECT expression::DATE;
    复制

10. date_trunc

  • 功能说明:

    date_trunc(field, source) 函数用于截断日期或时间戳,保留指定的时间单位(如年、月、日等)。它通常用于将日期精确到某个单位。

  • 测试语句:

    select a.*, datediff( month, to_date(bill_month, 'yyyymmdd'), date(date_trunc('month', sysdate)) ) month_diff --min(bill_month) 与当前月的时间差 from gs_test.test_function_date_trunc a;
    复制
  • Vertica 输出结果:

    在 vertica 中可以执行,如下图所示:

    date_trunc_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库在显示无此函数,如下图所示:

    column "month" does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    • Wutong DB 5.4Wutong DB 6 都支持 date_trunc() 函数:

      SELECT date_trunc('month', timestamp '2024-07-13 10:30:00');
      复制
    • 函数说明:

      • date_trunc(field, source):截断时间戳,保留到指定的 field 精度(如年、月、日等)。

11. datediff

  • 功能说明:

    datediff(unit, date1, date2) 函数用于计算两个日期之间的差异,并以指定的单位(如天、月、年等)返回结果。

  • 测试语句:

    select a.offer_name, sum(datediff(second, create_date, done_date)) / count(1) as order_time from gs_test.test_function_datediff01 a, gs_test.test_function_datediff02 b where --a.order_id = b.order_id and b.busi_code = 'ecCrt' and b.data_status = '1' group by a.offer_name;
    复制
  • Vertica 输出结果:

    在 vertica 中可以执行,如下图所示:

    datediff_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库在显示无此函数,如下图所示:

    column "second" does not exist
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    • Wutong DB 不直接提供 datediff 函数,但可以通过使用 AGE() 函数或 EXTRACT() 函数结合日期的相减操作来实现。

      • 计算天数差异

        • 使用日期相减直接返回两个日期之间的天数差异:
        SELECT date1 - date2;
        复制
      • 计算年、月差异:

        • 使用 AGE() 函数来返回年、月差异:
        SELECT AGE(date1, date2);
        复制
      • 如果需要获取更精确的天、月、年差异,可以结合 EXTRACT 函数来处理特定的时间单位:

        -- 计算年份差异 SELECT EXTRACT(YEAR FROM AGE(date1, date2)); -- 计算月份差异 SELECT EXTRACT(MONTH FROM AGE(date1, date2)); -- 计算天数差异 SELECT EXTRACT(DAY FROM AGE(date1, date2));
        复制
      • 自定义日期差异(如小时、分钟、秒):

        • 使用 EXTRACT 函数计算自定义单位的差异:
        -- 计算小时差异 SELECT EXTRACT(EPOCH FROM (date1 - date2)) / 3600; -- 计算分钟差异 SELECT EXTRACT(EPOCH FROM (date1 - date2)) / 60; -- 计算秒数差异 SELECT EXTRACT(EPOCH FROM (date1 - date2));
        复制

12. day

  • 功能说明:

    day(date) 函数用于返回日期中的“日”部分。该函数常用于从完整的日期中提取日信息。

  • 测试语句:

    select day(timestamp 'sep 22,2011 12:34');
    复制
  • Vertica 输出结果:

    在 vertica 中可以执行,如下所示:

    22
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库显示如下所示:

    22
    
    复制

13. dayofmonth

  • 功能说明:

    dayofmonth(date) 函数返回指定日期中的“日”部分,与 day 函数功能相同。

  • 测试语句:

    select dayofmonth(date(to_char(20240618)));
    复制
  • Vertica 输出结果:

    在 vertica 中可以执行,如下所示:

    18
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库显示找不到该函数 ,如下所示:

    function dayofmonth(date) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    • 使用 EXTRACT 函数:
    SELECT EXTRACT(DAY FROM date);
    复制

14. dayofweek

  • 功能说明:

    dayofweek(date) 函数返回指定日期对应的星期几, 1 表示星期日, 7 表示星期六。它常用于确定日期对应的星期几。

  • 测试语句:

    select case when dayofweek(date('20240618'))=1 then date('20240618')-6 when dayofweek(date('20240618'))=2 then date('20240618')-5 when dayofweek(date('20240618'))=3 then date('20240618')-4 when dayofweek(date('20240618'))=4 then date('20240618')-3 when dayofweek(date('20240618'))=5 then date('20240618')-2 when dayofweek(date('20240618'))=6 then date('20240618')-1 when dayofweek(date('20240618'))=7 then date('20240618') end ;
    复制
  • Vertica 输出结果:

    在 vertica 中可以执行,如下所示:

    2024/6/14
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库显示找不到该函数 ,如下所示:

    function dayofweek(date) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    • 使用 EXTRACT(DOW) 函数:
    SELECT EXTRACT(DOW FROM date);
    复制

15. dayofweek_iso

  • 功能说明:

    dayofweek_iso(date) 函数返回指定日期对应的 ISO 标准中的星期几, 1 表示星期一, 7 表示星期日。

  • 测试语句:

    select dayofweek_iso(timestamp 'sep 22,2011 12:34');
    复制
  • Vertica 输出结果:

    在 vertica 中可以执行,如下所示:

    4
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库显示找不到该函数 ,如下所示:

    function dayofweek_iso(timestamp without time zone) does not exist
    
    复制
  • Wutong DB 5.4 替代方案:

    • Wutong DB 5.4 中并不支持 ISODOW,可以使用以下方式手动计算:

      SELECT (EXTRACT(DOW FROM date) + 6) % 7 + 1;
      复制
  • Wutong DB 6 替代方案:

    • 使用 EXTRACT(ISODOW)

      SELECT EXTRACT(ISODOW FROM date);
      复制

16. dayofyear

  • 功能说明:

    dayofyear(date) 函数返回指定日期在一年中的第几天,通常用于计算日期在年度中的位置。

  • 测试语句:

    select dayofyear(last_day(to_date(to_char(202405),'yyyymm')));
    复制
  • Vertica 输出结果:

    在 vertica 中可以执行,如下所示:

    152
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库显示找不到该函数 ,如下所示:

    function dayofyear(date) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    • 使用 EXTRACT 计算天数:
    SELECT EXTRACT(DOY FROM date);
    复制

17. days

  • 功能说明:

    days(date) 函数返回日期从纪元到当前日期之间的天数。它通常用于日期计算和比较。

  • 测试语句:

    select deal_date, -- 终端号 case when separate_days is null and max_match_date is not null then days('2024-06-18') - days(date(to_char(max_match_date))) when separate_days is null and max_match_date is null then days('2024-06-18') - days(so_date) when separate_days is not null then separate_days end, is_imei2 from gs_test.test_function_days where is_imei2_number = 0 -- 无双卡情况 ;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    days_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库显示找不到该函数 ,如下所示:

    function days(unknown) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    • 两个版本都支持直接计算日期之间的天数:
    SELECT date1 - date2;
    复制

18. extract

  • 功能说明:

    extract(field from source) 函数用于从日期或时间中提取指定的部分(如年、月、日等)。与 date_part 类似,但更常见于 SQL 标准。

  • 测试语句:

    select prov_area_code, roam_area_code, serv_number, extract( day from (max(max_date_time) - min(min_date_time)) ) time_cha, -- 时间差值 count(distinct lac_cell) lac_count, roam_duration from gs_test.test_function_extract where statis_day = 20240618 group by prov_area_code, roam_area_code, serv_number, roam_duration order by prov_area_code, roam_area_code, serv_number;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    extract_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出结果如下图所示:

    extract_wutongdb_out.png

19. getdate

  • 功能说明:

    getdate() 函数返回当前的日期和时间。与 current_timestamp 类似,但在不同数据库中的实现可能有所不同。

  • 测试语句:

    select getdate();
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    2024-06-18 14:46:38.965
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库运行出错,找不到该函数,如下所示:

    function getdate() does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    两个版本都支持使用 CURRENT_TIMESTAMP 返回当前系统日期和时间:

    SELECT CURRENT_TIMESTAMP;
    复制

20. getutcdate

  • 功能说明:

    getutcdate() 函数返回当前的 UTC 日期和时间。它通常用于处理跨时区的数据。

  • 测试语句:

    select getutcdate();
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    2024/6/17 9:49:35
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库运行出错,找不到该函数,如下所示:

    function getutcdate() does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    两个版本都支持通过 CURRENT_TIMESTAMP AT TIME ZONE 'UTC' 返回当前 UTC 日期和时间:

    SELECT CURRENT_TIMESTAMP AT TIME ZONE 'UTC';
    复制

21. hour

  • 功能说明:

    hour(time) 函数返回时间中的“小时”部分。它通常用于从时间戳中提取小时信息。

  • 测试语句:

    select hour(timestamp 'sep 22,2011 12:34');
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    12
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库运行出错,找不到该函数,如下所示:

    function hour(timestamp without time zone) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    • 使用 EXTRACT(HOUR FROM timestamp)
    SELECT EXTRACT(HOUR FROM timestamp '2024-07-13 10:30:00');
    复制

22. isfinite

  • 功能说明:

    isfinite(timestamp) 函数用于检查时间戳是否为有限时间。返回布尔值,用于判断日期时间的有效性。

  • 测试语句:

    select isfinite(timestamp '2009-02-16 21:28:30');
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    TRUE
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库运行结果如下所示:

    TRUE
    
    复制

23. julian_day

  • 功能说明:

    julian_day(date) 函数返回指定日期的儒略日数,即从公元前 4713 年 1 月 1 日开始的天数。

  • 测试语句:

    select julian_day(date '2001-01-01');
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    2451911
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库运行出错,找不到该函数,如下所示:

    function julian_day(date) does not exist
    
    复制
  • Wutong DB 5.4 替代方案:

    • Wutong DB 5.4 不支持 EXTRACT(JULIAN),需要使用自定义公式计算儒略日:

      SELECT FLOOR(EXTRACT(EPOCH FROM date) / 86400 + 2440587.5);
      复制
  • Wutong DB 6 替代方案:

    • 从 Wutong DB 9.4 开始支持 EXTRACT(JULIAN)

      SELECT EXTRACT(JULIAN FROM date);
      复制

24. last_day

  • 功能说明:

    last_day(date) 函数返回指定日期所在月份的最后一天。它通常用于月底计算。

  • 测试语句:

    select c.goal_01 * day(last_day('2024-06-01')) goal_mon from gs_test.test_function_last_day c order by goal_mon;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    last_day_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出结果如下图所示:

    last_day_wutongdb_out.png

25. localtime

  • 功能说明:

    localtime 函数返回当前的时间,精度与 current_time 相同,但不包括时区信息。

  • 测试语句:

    select localtime;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    18:06:41
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:(输出格式不同)

    18:07:17.192392
    
    复制

26. localtimestamp

  • 功能说明:

    localtimestamp(precision) 函数返回当前的日期和时间,不包括时区信息。精度由参数指定。

  • 测试语句:

    select localtimestamp(2);
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    2024-06-17 18:09:38.620
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    2024-06-17 18:09:50.53
    
    复制

27. microsecond

  • 功能说明:

    microsecond(timestamp) 函数返回时间戳中的微秒部分。它常用于从精确到微秒的时间戳中提取微秒信息。

  • 测试语句:

    select microsecond(timestamp 'sep 22,2011 12:34:01.123456');
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    123456
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出错误 ,找不到该函数,结果如下所示:

    function microsecond(timestamp without time zone) does not exist
    
    复制
  • Wutong DB 5.4 替代方案:

    Wutong DB 5.4 不直接支持 EXTRACT(MICROSECONDS),可以使用以下方式提取微秒部分:

    SELECT EXTRACT(SECOND FROM timestamp) * 1000000;
    复制
  • Wutong DB 6 替代方案:

    Wutong DB 6 直接支持 EXTRACT(MICROSECONDS)

    SELECT EXTRACT(MICROSECONDS FROM timestamp);
    复制

28. midnight_seconds

  • 功能说明:

    midnight_seconds(timestamp) 函数返回从午夜开始到指定时间的秒数。这个函数通常用于计算一天内经过了多少秒。

  • 测试语句:

    select midnight_seconds('3-3-2016 12:00'::timestamp);
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    43200
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出错误 ,找不到该函数,结果如下所示:

    function midnight_seconds(timestamp without time zone) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    两个版本都支持使用以下公式计算自午夜以来的秒数:

    SELECT EXTRACT(EPOCH FROM time) - EXTRACT(EPOCH FROM time '00:00:00');
    复制

29. minute

  • 功能说明:

    minute(time) 函数返回时间中的“分钟”部分。它通常用于从时间戳中提取分钟信息。

  • 测试语句:

    select minute('12:34:03.456789');
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    34
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出错误 ,找不到该函数,结果如下所示:

    function minute(unknown) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    使用 EXTRACT(MINUTE FROM timestamp)

    SELECT EXTRACT(MINUTE FROM timestamp '2024-07-13 10:30:00');
    复制

30. month

  • 功能说明:

    month(date) 函数返回日期中的“月”部分。该函数常用于从日期中提取月份信息。

  • 测试语句:

    select grid_code,-- 网格编码 round((sum(case when statis_month<=202405 and floor(statis_month/100)=2024 then count_user_c else 0 end)/month(to_date(to_char(202405),'yyyymmdd')))- (sum(case when statis_month<=202404 and floor(statis_month/100)=2023 then count_user_c else 0 end)/month(to_date(to_char(202404),'yyyymmdd'))),2) average_user_increase_c --C 侧月均出账客户增加 from gs_test.test_function_month group by grid_code order by grid_code,average_user_increase_c;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    month_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出结果如下图所示:

    month_wutongdb_out.png

31. months_between

  • 功能说明:

    months_between(date1, date2) 函数计算两个日期之间的月份数。返回的值可以是小数,表示不完整的月数。

  • 测试语句:

    select up_area_code, serv_number, gprs_use_b/(months_between( to_date(to_char(202405),'yyyymmdd'), to_date(to_char(join_month),'yyyymmdd'))+1) gprs_use_b from gs_test.test_function_months_between where join_month>202312 order by up_area_code,serv_number,gprs_use_b;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    months_between_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出结果如下图所示:

    months_between_wutongdb_out.png

32. new_time

  • 功能说明:

    new_time(timestamp, timezone1, timezone2) 函数将给定的时间戳从一个时区转换为另一个时区。它用于跨时区时间的转换。

  • 测试语句:

    select new_time('01-01-12 01:00:00','EST','PST');
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    2011-12-31 22:00:00.000
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出错误 ,找不到该函数,结果如下所示:

    function new_time(unknown, unknown, unknown) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    两个版本都支持使用 AT TIME ZONE 进行时区转换:

    SELECT timestamp AT TIME ZONE 'timezone1' AT TIME ZONE 'timezone2';
    复制

33. next_day

  • 功能说明:

    next_day(date, day_of_week) 函数返回从指定日期开始的下一个指定星期几的日期。例如,如果指定日期是星期一,并且 day_of_week 是“ Friday”,该函数将返回下一个星期五的日期。

  • 测试语句:

    select next_day('4-29-2016'::timestamp,'Monday');
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    2016-05-02
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出错误 ,找不到该函数,结果如下所示:

    function next_day(timestamp without time zone, unknown) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    Wutong DB 5.4Wutong DB 6 不提供 next_day() 函数,可以通过以下 SQL 逻辑计算下一个星期几的日期:

    SELECT date '2024-03-01' + ((day_of_week - EXTRACT(DOW FROM date '2024-03-01') + 7) % 7);
    复制

    函数说明:

    • EXTRACT(DOW FROM date):返回给定日期是星期几,0 表示星期日,6 表示星期六。

34. now

  • 功能说明:

    now() 函数返回当前的日期和时间,包括时区信息。这个函数常用于记录操作发生的时间点。

  • 测试语句:

    select now();
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    2024-06-18 09:56:28.338
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    2024-06-18 09:56:24.683015+08:00
    
    复制

35. overlaps

  • 功能说明:

    overlaps (interval1, interval2) 函数用于判断两个时间间隔是否重叠。如果两个时间段有重叠部分,则返回 TRUE,否则返回 FALSE。

  • 测试语句:

    select (date '2016-02-16',date '2016-12-21') overlaps(date '2008-10-30',date '2016-10-30');
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    TRUE
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    TRUE
    
    复制

36. quarter

  • 功能说明:

    quarter(date) 函数返回日期所在的季度( 1 到 4 )。这个函数常用于基于季度的分析。

  • 测试语句:

    select case when quarter('2024-06-18') = 1 then '20220101' when quarter('2024-06-18') = 2 then '20220401' when quarter('2024-06-18') = 3 then '20220701' when quarter('2024-06-18') = 4 then '20221001' end;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    20220401
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    20220401
    
    复制

37. round

  • 功能说明:

    round(date, unit) 函数用于将日期或时间值舍入到指定的单位。单位可以是年、月、日等。

  • 测试语句:

    select grid_code , -- 网格编码 round(case when sum(case when data_time =202405 then fees else 0 end) <> 0 then (sum(case when data_time =202405 and coalesce(class1,'') ='1003' then fees else 0 end)/ sum(case when data_time =202405 then fees else 0 end))*100 else 0 end,2) incen_fro_business_m_zb, -- 当月业务激励占比 round(case when sum(case when data_time =202405 then fees else 0 end) <> 0 then (sum(case when data_time =202405 and coalesce(class1,'') ='1005' then fees else 0 end)/ sum(case when data_time =202405 then fees else 0 end))*100 else 0 end,2) basis_protection_m_zb, -- 当月基本保障占比 round(case when sum(case when data_time =202405 then fees else 0 end) <> 0 then (sum(case when data_time =202405 and coalesce(class1,'') ='1008' then fees else 0 end)/ sum(case when data_time =202405 then fees else 0 end))*100 else 0 end,2) cose_lins_m_zb, -- 当月成本支出占比 round(case when sum(case when data_time <=202405 then fees else 0 end) <> 0 then ((sum(case when data_time <=202405 and coalesce(class1,'') ='1003' then fees else 0 end)/202401)/ ((sum(case when data_time <=202405 then fees else 0 end))/202401))*100 else 0 end,2) incen_fro_business_y_zb, -- 当年业务激励占比 round(case when sum(case when data_time<=202405 then fees else 0 end) <> 0 then ((sum(case when data_time <=202405 and coalesce(class1,'') ='1005' then fees else 0 end)/202401)/ ((sum(case when data_time <=202405 then fees else 0 end))/202401))*100 else 0 end,2) basis_protection_y_zb, -- 当年基本保障占比 round(case when sum(case when data_time <=202405 then fees else 0 end) <> 0 then ((sum(case when data_time <=202405 and coalesce(class1,'') ='1008' then fees else 0 end)/202401)/ ((sum(case when data_time <=202405 then fees else 0 end))/202401))*100 else 0 end,2) cose_lins_y_zb -- 当年成本支出占比 from gs_test.test_function_round where data_time>=202401 group by grid_code order by grid_code,incen_fro_business_m_zb,basis_protection_m_zb,cose_lins_m_zb,incen_fro_business_y_zb,basis_protection_y_zb,cose_lins_y_zb limit 10;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    round_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出结果如下图所示:(前三个字段小数保留位数不一致)

    round_wutongdb_out.png

38. second

  • 功能说明:

    second(time) 函数返回时间中的“秒”部分。它通常用于从时间戳中提取秒的信息。

  • 测试语句:

    select second('23:34:03.456789');
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    3
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出错误 ,找不到该函数,结果如下所示:

    function second(unknown) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    使用 EXTRACT(SECOND FROM timestamp)

    SELECT EXTRACT(SECOND FROM timestamp '2024-07-13 10:30:00');
    复制

39. statement_timestamp

  • 功能说明:

    statement_timestamp() 函数返回当前语句的开始时间戳。与 transaction_timestamp 类似,但 statement_timestamp 专门用于标识当前 SQL 语句的执行时间。

  • 测试语句:

    select statement_timestamp();
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    2024-06-18 10:05:23.022
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输结果如下所示:(输出格式不同)

    2024-06-18 10:05:20.879817+08:00
    
    复制

40. sysdate

  • 功能说明:

    sysdate() 函数返回数据库服务器的当前日期和时间。与 current_timestamp 类似,但通常更加依赖于数据库的时间设置。

  • 测试语句:

    select to_char(sysdate()-1,'YYYYMMDD') deal_cycle;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    20240618
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输结果如下所示:(输出格式不同)

    select to_char(sysdate()-1,'YYYYMMDD') deal_cycle;
    
    复制

41. time_slice

  • 功能说明:

    time_slice(timestamp, interval) 函数用于将时间戳切片,返回与时间戳最近的指定间隔的开始时间。它用于时间序列分析和数据分割。

  • 测试语句:

    select time_slice('2009-09-09 00:00:01',3);
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    2009-09-09 00:00:00.000
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出错误 ,找不到该函数,结果如下所示:

    function time_slice(unknown, integer) does not exist
    
    复制
  • Wutong DB 5.4 与 Wutong DB 6 替代方案:

    Wutong DB 5.4 中不支持高级时间切分函数,可以使用 date_trunc() 结合简单的时间间隔操作:

    SELECT date_trunc('minute', timestamp) + INTERVAL '30 minutes';
    复制

42. timeofday

  • 功能说明:

    timeofday() 函数返回当前时间,包括日期、时间、时区和其他信息。它在一些数据库中返回与 now() 类似的结果。

  • 测试语句:

    select timeofday();
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下所示:

    Tue Jun 18 10:10:35.155199 2024 CST
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:(输出格式不同)

    Tue Jun 18 10:10:17.561651 2024 +08:00
    
    复制

43. timestampadd

  • 功能说明:

    timestampadd(unit, value, timestamp) 函数将指定的时间单位和值添加到时间戳中,返回一个新的时间戳。常用于调整时间戳,例如加上几天或几小时。

  • 测试语句:

    select distinct cast ( case when product_name = ' 千里眼 ' and to_number(over_duration) - to_number(approval_time) > 48 then to_number(over_duration) - to_number(approval_time) -48 when product_name = ' 政企宽带 ' and to_number(substr(createtime, 12, 2)) < 16 and approval_Date is null and active_Date is null and to_number(substr(createtime, 10, 2)) <> to_number(substr(netendtime, 10, 2)) then timestampDIFF( 'minute', (to_timestamp(createtime, 'YYYY-MM-DD 00:00:00') + 1), (to_timestamp(netendtime, 'YYYY-MM-DD HH:MI:SS')) ) / 60 when product_name = ' 政企宽带 ' and to_number(substr(createtime, 12, 2)) >= 16 and approval_Date is null and active_Date is null and timestampdiff( day, to_timestamp(createtime, 'YYYY-MM-DD HH:MI:SS'), to_timestamp(netendtime, 'YYYY-MM-DD HH:MI:SS') ) > 0 and to_timestamp(netendtime, 'YYYY-MM-DD HH:MI:SS') > timestampadd( 'hour', 12, to_timestamp(createtime, 'YYYY-MM-DD 00:00:00') + 1 ) then timestampDIFF( 'minute', ( timestampadd( 'hour', 12, to_timestamp(createtime, 'YYYY-MM-DD 00:00:00') + 1 ) ), (to_timestamp(netendtime, 'YYYY-MM-DD HH:MI:SS')) ) / 60 when product_name = ' 政企宽带 ' and approval_Date is not null and active_Date is not null and to_number(over_duration) - to_number(approval_time) > 12 then to_number(over_duration) - to_number(approval_time) - 12 else null end as decimal(12, 2) ) as over_duration, cast ( to_number(over_duration) - to_number(approval_time) as decimal(12, 2) ) as over_time, case when ( product_name = ' 千里眼 ' and to_number(over_duration) - to_number(approval_time) > 48 ) or ( product_name = ' 政企宽带 ' and to_number(substr(createtime, 12, 2)) < 16 and approval_Date is null and active_Date is null and to_number(substr(createtime, 10, 2)) <> to_number(substr(netendtime, 10, 2)) ) or ( product_name = ' 政企宽带 ' and to_number(substr(createtime, 12, 2)) >= 16 and approval_Date is null and active_Date is null and timestampdiff( day, to_timestamp(createtime, 'YYYY-MM-DD HH:MI:SS'), to_timestamp(netendtime, 'YYYY-MM-DD HH:MI:SS') ) > 0 and to_timestamp(netendtime, 'YYYY-MM-DD HH:MI:SS') > timestampadd( 'hour', 12, to_timestamp(createtime, 'YYYY-MM-DD 00:00:00') + 1 ) ) or ( product_name = ' 政企宽带 ' and approval_Date is not null and active_Date is not null and to_number(over_duration) - to_number(approval_time) > 12 ) then '1' else '0' end as is_overtime -- 是否超时 1 为是 0 为否 from gs_test.test_function_timestampadd where statis_day = '20240618' order by over_duration, over_time, is_overtime;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    timestampadd_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出错误 ,结果如下所示:

    operator does not exist: timestamp with time zone + integer
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    使用 INTERVAL 操作符:

    SELECT timestamp '2024-01-01' + INTERVAL '1 day';
    复制

44. timestampdiff

  • 功能说明:

    timestampdiff(unit, timestamp1, timestamp2) 函数计算两个时间戳之间的差异,并以指定的单位返回结果,例如天、小时、分钟等。

  • 测试语句:

    select statis_day, -- 统计日期 serv_number, -- 用户号码 call_date, -- 通话日期 timestampdiff(minute, login_time, leave_time) duration, sum((up_data_flux)) up_data_flux, -- 上行数据流量 sum((down_data_flux)) down_data_flux -- 下行数据流量 from gs_test.test_function_timestampdiff where statis_day = 20240618 group by statis_day, serv_number, call_date, timestampdiff(minute, login_time, leave_time) order by statis_day, serv_number, call_date, duration, up_data_flux, down_data_flux;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    timestampdiff_vertica_out.png

  • Wutong DB 输出结果:

    在梧桐数据库输出错误 ,结果如下所示:

    column "minute" does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    Wutong DB 没有 timestampdiff 函数,但可以使用 AGE()EXTRACT() 函数结合日期相减来实现。

    计算两个时间戳之间的差异(自定义时间单位):

    1. 计算年差异
    SELECT EXTRACT(YEAR FROM AGE(timestamp1, timestamp2));
    复制
    1. 计算月差异
    SELECT EXTRACT(YEAR FROM AGE(timestamp1, timestamp2)) * 12 + EXTRACT(MONTH FROM AGE(timestamp1, timestamp2));
    复制
    1. 计算天数差异
    SELECT EXTRACT(DAY FROM (timestamp1 - timestamp2));
    复制
    1. 计算小时差异
    SELECT EXTRACT(EPOCH FROM (timestamp1 - timestamp2)) / 3600;
    复制
    1. 计算分钟差异
    SELECT EXTRACT(EPOCH FROM (timestamp1 - timestamp2)) / 60;
    复制
    1. 计算秒差异
    SELECT EXTRACT(EPOCH FROM (timestamp1 - timestamp2));
    复制
    • 解释
      • AGE() 用于计算两个时间戳之间的年、月差异。
      • EXTRACT(EPOCH) 将时间差转换为秒,可以根据需要转换为小时、分钟等单位。

45. timestamp_round

  • 功能说明:

    timestamp_round(timestamp, unit) 函数用于将时间戳舍入到最近的指定单位(如分钟、小时、天)。它用于简化时间戳以便于分析。

  • 测试语句:

    select timestamp_round('9-22-2011 12:34:00'::timestamp,'MM');
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    2011-10-01 00:00:00.000
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出错误 ,找不到该函数,结果如下所示:

    function timestamp_round(timestamp without time zone, unknown) does not exist
    
    复制
  • Wutong DB 5.4 替代方案:

  • Wutong DB 5.4 没有 timestamp_round() 函数,可以通过手动四舍五入实现:

    SELECT date_trunc('minute', timestamp) + INTERVAL '30 seconds';
    复制
  • Wutong DB 6 替代方案:

    Wutong DB 6 版本同样不直接支持 timestamp_round(),可以使用相同的逻辑进行手动实现。

46. timestamp_trunc

  • 功能说明:

    timestamp_trunc(timestamp, unit) 函数用于截断时间戳到指定的时间单位。与 timestamp_round 类似,但它总是向下舍入到最近的单位边界。

  • 测试语句:

    select timestamp_trunc('9-22-2011 12:34:00'::timestamp,'MM');
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    2011-09-01 00:00:00.000
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出错误 ,找不到该函数,结果如下所示:

    function timestamp_trunc(timestamp without time zone, unknown) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    两个版本都支持 date_trunc() 函数:

    SELECT date_trunc('hour', timestamp);
    复制

47. transaction_timestamp

  • 功能说明:

    transaction_timestamp() 函数返回当前事务的开始时间戳。与 statement_timestamp 不同,它在整个事务过程中保持不变。

  • 测试语句:

    select transaction_timestamp();
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    2024-06-18 10:50:46.644
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出结果如下所示:

    2024-06-18 10:50:32.273504+08:00
    
    复制

48. trunc

  • 功能说明:

    trunc(date, unit) 函数用于截断日期或时间到指定的单位,例如年、月、日等。它在日期操作中用于简化日期。

  • 测试语句:

    select distinct serv_number, case when (trunc(202405/100)*12 + mod(202405,100)) - (year(date(cur_valid_imei_date))*12 + month(date(cur_valid_imei_date))) > 999 then 999 when (trunc(202405/100)*12 + mod(202405,100)) - (year(date(cur_valid_imei_date))*12 + month(date(cur_valid_imei_date))) <= 0 then 1 else (trunc(202405/100)*12 + mod(202405,100)) - (year(date(cur_valid_imei_date))*12 + month(date(cur_valid_imei_date))) end num from gs_test.test_function_trunc order by serv_number,num;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    trunc_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出出错,找不到该函数,结果如下所示:

    function year(date) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    • 使用 date_trunc() 替代:
    SELECT date_trunc('month', timestamp '2024-07-13 10:30:00');
    复制

49. week

  • 功能说明:

    week(date) 函数返回日期在一年中的第几周,通常用于周报或周度分析。

  • 测试语句:

    select statis_month, area_code, opp_area_code, opp_brand, serv_number, opp_number, count(*), count(distinct week(call_date)), count(distinct case when to_number(to_char(call_date,'dd'))<=10 then 1 when to_number(to_char(call_date,'dd'))>10 AND to_number(to_char(call_date,'dd'))<=20 then 2 else 3 end), sum(coalesce(call_duration,0)), sum(coalesce(call_fee_duration,0)), sum(coalesce(call_count,0)) from gs_test.test_function_week where area_code between '930' and '931' group by statis_month, area_code, serv_number, opp_number, opp_area_code, opp_brand order by statis_month, area_code, serv_number, opp_number, opp_area_code, opp_brand;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    week_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出出错,找不到该函数,结果如下所示:

    function week(date) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    使用 EXTRACT(WEEK FROM date)

    SELECT EXTRACT(WEEK FROM date);
    复制

50. week_iso

  • 功能说明:

    week_iso(date) 函数返回日期在 ISO 标准中所在的周数。 ISO 周从周一开始,以年度第一个周一为标准。

  • 测试语句:

    select week_iso('1-4-2016'::date);
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    1
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出出错,找不到该函数,结果如下所示:

    function week_iso(date) does not exist
    
    复制
  • Wutong DB 5.4 替代方案:

    Wutong DB 5.4 不支持直接获取 ISO 标准的周数,但可以通过手动计算方式实现。可以使用 EXTRACT 和一些调整逻辑计算 ISO 周数:

    SELECT EXTRACT(WEEK FROM date) - CASE WHEN EXTRACT(DOW FROM date) = 1 THEN 1 ELSE 0 END;
    复制
    • 解释
      • EXTRACT(WEEK FROM date) 获取标准周数。
      • EXTRACT(DOW FROM date) 获取周几的数字(0 表示周日,1 表示周一)。
      • 如果日期为周一之前的日子,则减去 1 以符合 ISO 标准。
  • Wutong DB 6 替代方案:

    从 Wutong DB 9.5 开始,Wutong DB 支持直接使用 EXTRACT(ISOWEEK) 提取 ISO 标准的周数:

    SELECT EXTRACT(ISOWEEK FROM date);
    复制
    • 解释
      • EXTRACT(ISOWEEK) 提取 ISO 标准的周数,符合 ISO 8601 标准。

51. year

  • 功能说明:

    year(date) 函数返回日期中的“年”部分。它通常用于从日期中提取年份信息。

  • 测试语句:

    select distinct serv_number, -- 用户号码 year(now()) - to_number(substring(to_char(birth_date, 'yyyymmdd'), 1, 4)) birth_date, floor( ( to_number(to_char(sysdate(), 'yyyymmdd')) - to_number(substring(to_char(birth_date, 'yyyymmdd'), 1, 8)) ) / 10000 ) birth_date2 from gs_test.test_function_year where birth_date is not null and length(serv_number) = '11' --- 号码长度等于 11 位,剔除物联网用户 -- and substr(serv_number,1,2) <>'10' and substr(serv_number,1,2) <>'11' and substr(serv_number,1,2) <>'12' and substr(serv_number,1,1) ='1' and reg_type='100000001' order by serv_number, birth_date, birth_date2;
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    year_vertica_out.png

  • WutongDB 输出结果:

    在梧桐数据库输出出错,找不到该函数,结果如下所示:

    function year(timestamp with time zone) does not exist
    
    复制
  • Wutong DB 5.4 和 Wutong DB 6 替代方案:

    两个版本都支持 EXTRACT(YEAR)

    SELECT EXTRACT(YEAR FROM date);
    复制

52. year_iso

  • 功能说明:

    year_iso(date) 函数返回 ISO 标准下的年份,这对于跨年周的日期特别有用。

  • 测试语句:

    select year_iso('1-4-2016'::date);
    复制
  • Vertica 输出结果:

    vertica 可以直接使用该函数,输出结果如下图所示:

    2016
    
    复制
  • WutongDB 输出结果:

    在梧桐数据库输出出错,找不到该函数,结果如下所示:

    function year_iso(date) does not exist
    
    复制
  • Wutong DB 5.4 替代方案:

    Wutong DB 5.4 不支持 EXTRACT(ISOYEAR),可以通过自定义公式计算:

    SELECT CASE WHEN EXTRACT(DOW FROM date) = 1 AND EXTRACT(WEEK FROM date) = 1 THEN EXTRACT(YEAR FROM date) - 1 ELSE EXTRACT(YEAR FROM date) END;
    复制
  • Wutong DB 6 替代方案:

    Wutong DB 6 版本支持 EXTRACT(ISOYEAR)

    SELECT EXTRACT(ISOYEAR FROM date);
    复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论

T
Task123
暂无图片
5月前
评论
暂无图片 0
感谢分享
5月前
暂无图片 点赞
评论
小怪兽👻
暂无图片
5月前
评论
暂无图片 0
感谢分享
5月前
暂无图片 点赞
评论
TA的专栏
梧桐数据库
收录52篇内容
目录
  • 测试环境:
  • 1. add_months
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 2. age_in_months
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 替代方案:
    • Wutong DB 6 替代方案:
  • 3. age_in_years
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 替代方案:
  • 4. clock_timestamp
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 5. current_date
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 6. current_time
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 7. current_timestmp
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 8. date_part
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 9. date
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 替代方案:
    • Wutong DB 6 替代方案:
  • 10. date_trunc
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 11. datediff
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 12. day
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 13. dayofmonth
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 14. dayofweek
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 15. dayofweek_iso
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 替代方案:
    • Wutong DB 6 替代方案:
  • 16. dayofyear
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 17. days
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 18. extract
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 19. getdate
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 20. getutcdate
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 21. hour
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 22. isfinite
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 23. julian_day
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 替代方案:
    • Wutong DB 6 替代方案:
  • 24. last_day
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 25. localtime
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 26. localtimestamp
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 27. microsecond
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 替代方案:
    • Wutong DB 6 替代方案:
  • 28. midnight_seconds
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 29. minute
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 30. month
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 31. months_between
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 32. new_time
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 33. next_day
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 34. now
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 35. overlaps
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 36. quarter
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 37. round
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 38. second
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 39. statement_timestamp
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 40. sysdate
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 41. time_slice
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 与 Wutong DB 6 替代方案:
  • 42. timeofday
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 43. timestampadd
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 44. timestampdiff
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • Wutong DB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 45. timestamp_round
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 替代方案:
    • Wutong DB 6 替代方案:
  • 46. timestamp_trunc
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 47. transaction_timestamp
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
  • 48. trunc
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 49. week
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 50. week_iso
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 替代方案:
    • Wutong DB 6 替代方案:
  • 51. year
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 和 Wutong DB 6 替代方案:
  • 52. year_iso
    • 功能说明:
    • 测试语句:
    • Vertica 输出结果:
    • WutongDB 输出结果:
    • Wutong DB 5.4 替代方案:
    • Wutong DB 6 替代方案: