SQL格式化(字符串,时间,数字之间的相互转化)

SQL常用格式转化方法

目录


1. 数字格式转化

千分位数字格式化(保留两位小数)

Oracle

SELECT TO_CHAR(12345.3, 'FM999,999,999,999,990.00') AS formatted_num FROM dual;
  • FM:防止前导空格
  • 0.00:保证小数点后两位

MySQL

SELECT FORMAT(12345.3, 2) AS formatted_num;

Hive/Impala
Hive/Impala没有内置千分位格式化函数,可用printf或自定义UDF:

SELECT printf('%,.2f', 12345.3); -- 输出: 12,345.30 -- 支持hive查询
SELECT format_number(12345.3, 2); -- 输出: 12,345.30  -- 支持hive查询,impala可能得看版本支持

2. 时间格式转化

2.1 字符串转时间

目标 Oracle Hive/Impala MySQL
例:'20250101'转日期 TO_DATE('20250101', 'YYYYMMDD') from_unixtime(unix_timestamp('20250101', 'yyyyMMdd'),'yyyy-MM-dd') STR_TO_DATE('20250101', '%Y%m%d')

示例:

  • Oracle:
    SELECT TO_DATE('20250101', 'YYYYMMDD') AS dt FROM dual;
    
  • Hive/Impala:
    SELECT from_unixtime(
             unix_timestamp('20250101', 'yyyyMMdd'), 
             'yyyy-MM-dd'
         ) AS dt
    
  • MySQL:
    SELECT STR_TO_DATE('20250101', '%Y%m%d') AS dt;
    

2.2 时间转字符串

目标 Oracle Hive/Impala MySQL
日期转'2025-01-01' TO_CHAR(sysdate, 'YYYY-MM-DD') date_format(current_date, 'yyyy-MM-dd') DATE_FORMAT(NOW(), '%Y-%m-%d')

示例:

  • Oracle:
    SELECT TO_CHAR(sysdate, 'YYYY-MM-DD') AS str FROM dual;
    
  • Hive/Impala:
    SELECT date_format(current_date, 'yyyy-MM-dd') AS str;
    
  • MySQL:
    SELECT DATE_FORMAT(NOW(), '%Y-%m-%d') AS str;
    

2.3 时间戳数字转时间

目标 Oracle Hive/Impala MySQL
例:数字时间戳转日期 FROM_UNIXTIME(1704067200, 'yyyy-MM-dd') from_unixtime(1704067200, 'yyyy-MM-dd') FROM_UNIXTIME(1704067200, '%Y-%m-%d')

示例:

  • Oracle(需先转秒数):
    SELECT TO_DATE('1970-01-01','YYYY-MM-DD') + NUMTODSINTERVAL(1704067200, 'SECOND') AS dt FROM dual;
    
  • Hive/Impala:
    SELECT from_unixtime(1704067200, 'yyyy-MM-dd') AS dt;
    
  • MySQL:
    SELECT FROM_UNIXTIME(1704067200, '%Y-%m-%d') AS dt;
    

2.4 时间转数字(时间戳)

目标 Oracle Hive/Impala MySQL
日期转UNIX时间戳 (date - TO_DATE('1970-01-01','YYYY-MM-DD'))*86400 unix_timestamp(date) UNIX_TIMESTAMP(date)

示例:

  • Oracle:
    SELECT (TO_DATE('2025-01-01','YYYY-MM-DD') - TO_DATE('1970-01-01','YYYY-MM-DD'))*86400 AS ts FROM dual;
    
  • Hive/Impala:
    SELECT unix_timestamp('2025-01-01', 'yyyy-MM-dd') AS ts;
    
  • MySQL:
    SELECT UNIX_TIMESTAMP('2025-01-01') AS ts;
    

3. 其他说明

  • SQL的主要功能是数据查询和分析,格式转化建议适度使用。
  • 对于复杂的格式化需求,建议在应用层或报表工具中处理。

4. FR格式转化方法

FR自带一些格式转化方法,如在javascript中:

FR.contentFormat(表达式, '#,##0.00')

自带的公式

format(表达式, '#,##0.00')

参考资料

posted @ 2025-05-29 19:01  灯熄帘摇月候身  阅读(128)  评论(0)    收藏  举报