在 MaxCompute 中,有多种格式化相关的函数,下面详细介绍一些常用的格式化函数及其使用方法。

日期时间格式化

DATE_FORMAT 支持将 DATE、TIMESTAMP 和 STRING 类型的数据,转换为指定格式的字符串。本文介绍 DATE_FORMAT 函数的命令格式和使用示例。

命令格式

string date_format(date|timestamp|string <date>, string <format>)

参数说明

  • date:必填。待转换的日期值。支持 DATE、TIMESTAMP 或 STRING 类型
  • DATE 和 STRING 类型只能在 Hive 兼容模式下使用,您可以执行 set odps.sql.hive.compatible=true;命令打开 Hive 模式
  • 如果参数为 STRING 类型,则格式只支持以下三种日期字段:
  • 'yyyy-MM-dd',例如'2019-12-27'
  • 'yyyy-MM-dd hh:mm:ss',例如'2019-12-27 12:23:10'
  • 'yyyy-MM-dd hh:mm:ss.SSS',例如'2019-12-27 12:23:10.123'
  • format:必填。format 可由如下日期字段组成,例如 yyyy-MM-dd hh:mm:ss.SSS 或 yyyy-MM-dd hh:mi:ss.SSS:
  • YYYY 或 yyyy 代表年份,其中 yyyy 代表日历年,YYYY 代表周年
  • MM 代表月份
  • mm 代表分钟
  • dd 代表天
  • HH 代表24小时制时
  • hh 代表12小时制时
  • ss 代表秒
  • SSS 代表毫秒
  • 返回值说明

    返回 STRING 类型数据。返回规则如下:

    • date 值为非 DATE 或 TIMESTAMP 类型时,返回 NULL。
    • date 值为 NULL 时,返回报错。
    • format 值为 NULL 时,返回 NULL。

    示例数据

    -- 打开 Hive 模式。与 SQL 语句一起提交
    set odps.sql.hive.compatible=true;
    
    -- 假设当前时间为 2023-11-20 17:52。返回 2023-11-20 17:52:41.544
    select date_format(from_utc_timestamp(current_timestamp(), 'UTC'),'yyyy-MM-dd HH:mm:ss.SSS');
    
    -- 返回 2022-04-24
    select date_format('2022-04-24','yyyy-MM-dd');
    
    -- 打开 Hive 模式并开启 2.0 新类型。与 SQL 语句一起提交
    set odps.sql.hive.compatible=true;
    set odps.sql.type.system.odps2=true;
    select 
        date_format(date'2021-11-29', 'yyyy-MM-dd')
        ,date_format(datetime'2021-11-29 00:01:00', 'yyyy-MM-dd')
        ,date_format(timestamp'2021-01-11 00:00:00.123456789', 'yyyy-MM-dd')
        ,date_format(datetime'2021-11-29 22:01:00', 'yyyy-MM-dd HH:mm:ss')
        ,date_format(timestamp'2021-01-11 22:30:00.123456789', 'yyyy-MM-dd HH:mm:ss');
    
    +------------+------------+------------+---------------------+---------------------+
    | _c0        | _c1        | _c2        | _c3                 | _c4                 |
    +------------+------------+------------+---------------------+---------------------+
    | 2021-11-29 | 2021-11-29 | 2021-01-11 | 2021-11-29 22:01:00 | 2021-01-11 22:30:00 |
    +------------+------------+------------+---------------------+---------------------+
    
    -- 打开 Hive 模式。与 SQL 语句一起提交
    set odps.sql.hive.compatible=true;
    select 
        date_format(date'2025-01-01', 'yyyy年MM月dd日')
        ,date_format(date'2025-01-01', 'yyyy年M月d日');
    +----------------+----------------+
    | _c0            | _c1            |
    +----------------+----------------+
    | 20250101 | 202511   |
    +----------------+----------------+    
    

    数字格式化

    FORMAT_NUMBER 为 MaxCompute 2.0扩展函数,用于格式化数字,使其按照指定的格式显示,通常包括千位分隔符、小数点后的位数等。本文为您介绍 FORMAT_NUMBER 的命令格式、参数说明以及使用示例。

    命令格式

    string format_number(float|double|decimal <expr1>, <expr2>)
    

    参数说明

    • expr1:必填。需要格式化的数据。DOUBLE、BIGINT、INT、SMALLINT、TINYINT、FLOAT、DECIMAL、STRING 类型。
    • expr2:必填。需要转化的目标格式。指定需要保留小数位数。也可以为类似 #,###,###.## 格式描述。

    返回值说明

    返回 STRING 类型数据。返回规则如下:

    • 如果 expr2>0,则四舍五入到小数点后指定位数。
    • 如果 expr2=0,则没有小数点或小数部分。
    • 如果 expr2<0,或者 expr2>340,则返回报错。
    • expr1expr2 值为 NULL时,返回 NULL。

    示例数据

    -- 返回 5.230
    select format_number(5.230134523424545456, 3);
    
    -- 返回 12,332.123
    select format_number(12332.123456, '#,###,###,###.###');
    
    -- 返回 NULL
    select format_number(null, 3);
    

    参考资料

    DATE_FORMAT

    FORMAT_NUMBER

    原创文章,转载请注明出处:http://www.opcoder.cn/article/88/