头图

测试环境:

  • 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() 函数结合日期的相减操作来实现。
 - **计算天数差异**:

   - 使用日期相减直接返回两个日期之间的天数差异:

    ```sql
   SELECT date1 - date2;
    ```


 - **计算年、月差异:**

   - 使用 `AGE()` 函数来返回年、月差异:

   ```sql
   SELECT AGE(date1, date2);
   ```


 - **如果需要获取更精确的天、月、年差异,可以结合 `EXTRACT` 函数来处理特定的时间单位:**

   ```sql
   -- 计算年份差异
   SELECT EXTRACT(YEAR FROM AGE(date1, date2));
    
   -- 计算月份差异
   SELECT EXTRACT(MONTH FROM AGE(date1, date2));
    
   -- 计算天数差异
   SELECT EXTRACT(DAY FROM AGE(date1, date2));
   ```

 - **自定义日期差异(如小时、分钟、秒):**

   - 使用 `EXTRACT` 函数计算自定义单位的差异:

   ```sql
   -- 计算小时差异
   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);

千钧
7 声望4 粉丝

不爱美食的古玩爱好者不是一个真正的程序猿!