Redash中PostgreSQL的DATEDIFF转日期及to_char用法咨询
Redash PostgreSQL环境下的日期处理解决办法
1. 替代DATEDIFF函数
PostgreSQL没有原生的DATEDIFF函数,计算两个日期的天数差可以直接用日期相减,或者用AGE()函数:
- 直接减法写法:
(remis_restricted.actchb_xlt_vw.install_date - '1900-01-01'::date)::int + 2 - AGE函数写法:
EXTRACT(DAY FROM AGE(remis_restricted.actchb_xlt_vw.install_date, '1900-01-01'::date))::int + 2
2. 把WING_INST_DT的数值转成日期类型
你得到的37714是从1900-01-01开始的天数偏移(还加了2),要转成日期,直接用基准日期加天数间隔就行:
-- 针对已有的37714数值转换 ('1900-01-01'::date + (WING_INST_DT::int - 2) * INTERVAL '1 day') AS WING_INST_DATE
如果不想先算数值,直接在原SQL里生成日期:
('1900-01-01'::date + (remis_restricted.actchb_xlt_vw.install_date - '1900-01-01'::date) + INTERVAL '2 days') AS WING_INST_DATE
3. 用to_char把日期格式化为mm/dd/yyyy
拿到日期类型后,用to_char指定格式就能输出你要的字符串格式:
-- 直接格式化现有日期字段 to_char(remis_restricted.actchb_xlt_vw.install_date, 'MM/DD/YYYY') AS formatted_install_date -- 格式化转换后的WING_INST_DATE to_char(('1900-01-01'::date + (remis_restricted.actchb_xlt_vw.install_date - '1900-01-01'::date) + INTERVAL '2 days'), 'MM/DD/YYYY') AS formatted_WING_INST_DATE
4. 解决Redash默认日期格式问题
Redash默认会把日期显示成dd/mm/yyyy,只要你用to_char把日期转成字符串类型的MM/DD/YYYY格式,Redash就会直接显示你指定的格式,不会自动转换。如果是日期类型字段被自动转格式,直接套to_char转成字符串输出就行。
内容的提问来源于stack exchange,提问作者user23226732
相关产品推荐
相关产品推荐

