You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于数字类型LOG_DTM_ID获取上月数据?SQL技术求助

解决思路与方法

方法一:将LOG_DTM_ID转回日期类型处理

把数字型的LOG_DTM_ID转换成日期类型,就能沿用你之前熟悉的日期函数逻辑,避开复杂的数字运算。
示例代码(适配多数SQL方言):

-- 先转字符串再转日期,不同数据库转换函数略有差异
EXTRACT(month FROM CURRENT_DATE)-1 = EXTRACT(month FROM TO_DATE(CAST(LOG_DTM_ID AS VARCHAR), 'YYYYMMDD')) 
AND EXTRACT(year FROM CURRENT_DATE) = EXTRACT(year FROM TO_DATE(CAST(LOG_DTM_ID AS VARCHAR), 'YYYYMMDD'))

注:MySQL用STR_TO_DATE替代TO_DATE,SQL Server用CONVERT(DATE, CAST(LOG_DTM_ID AS VARCHAR), 112),核心是按YYYYMMDD格式把数字解析为日期。

方法二:直接对LOG_DTM_ID的数字做年月匹配

既然LOG_DTM_ID是YYYYMMDD格式的数字,可直接提取前6位(YYYYMM)来匹配上月的年月值:

  1. 先计算上月的年月数字(比如当前是2024-05,上月就是202404)
  2. 提取LOG_DTM_ID的前6位进行匹配

计算上月年月的代码:

CASE 
  WHEN EXTRACT(month FROM CURRENT_DATE) = 1 
  THEN (EXTRACT(year FROM CURRENT_DATE)-1)*100 + 12 
  ELSE EXTRACT(year FROM CURRENT_DATE)*100 + (EXTRACT(month FROM CURRENT_DATE)-1) 
END AS last_month_ym

匹配LOG_DTM_ID的代码(用整除提取前6位):

LOG_DTM_ID // 100 = 
  CASE 
    WHEN EXTRACT(month FROM CURRENT_DATE) = 1 
    THEN (EXTRACT(year FROM CURRENT_DATE)-1)*100 + 12 
    ELSE EXTRACT(year FROM CURRENT_DATE)*100 + (EXTRACT(month FROM CURRENT_DATE)-1) 
  END

额外提示

  • 优先选方法一,逻辑直观,能自动处理跨年场景(比如1月的上月是去年12月)
  • 用方法二时必须注意跨年边界,避免1月出现匹配错误

内容的提问来源于stack exchange,提问作者ben jjm

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 15:45:46