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

OLAP表转事务表:日期转换查询返回NULL问题求助

问题排查与解决:OLAP表转事务表时Date列NULL问题

原表结构

IDPeriod Month0102Employee Code
1202401KL005678
2202401S1M005679

预期结果

Employee CodePeriod MonthDateValue
0056782024012024-01-01K
0056782024012024-01-02L
0056792024012024-01-01S1
0056792024012024-01-02M

原SQL问题分析

原查询中Date列全为NULL的核心原因是日期拼接格式错误:

  • CAST([Period Month] AS CHAR(4))将6位的yyyymm值(如202401)截断为前4位(2024),拼接-01后得到2024-01,这是年月格式而非完整的年月日格式,TRY_CAST无法正确转换为DATE类型,最终返回NULL。
  • 冗余的CASE语句不仅增加复杂度,还掩盖了格式错误的问题。

修正后的SQL

SELECT 
    [Employee Code], 
    [Period Month],
    TRY_CAST(LEFT([Period Month], 4) + '-' + RIGHT([Period Month], 2) + '-' + [DayCol] AS DATE) AS [Date],
    [Value]
FROM 
    (SELECT [Employee Code], [Period Month], 
            [01], [02]
     FROM CTE1) AS SourceTable
UNPIVOT
    ([Value] FOR [DayCol] IN 
        ([01], [02])) AS UnpivotedTable
WHERE TRY_CAST(LEFT([Period Month], 4) + '-' + RIGHT([Period Month], 2) + '-' + [DayCol] AS DATE) IS NOT NULL
ORDER BY [Employee Code], [Period Month], [Date];

关键优化点

  1. 正确拼接日期:用LEFT([Period Month],4)提取年份,RIGHT([Period Month],2)提取月份,与日部分([DayCol])拼接成yyyy-mm-dd格式的字符串,确保TRY_CAST能正确转换为DATE类型。
  2. 避免列名冲突:将UNPIVOT的列名从[Date]改为[DayCol],提升代码可读性。
  3. 过滤无效日期:通过WHERE子句排除转换失败的NULL值,确保结果仅包含有效日期。

内容的提问来源于stack exchange,提问作者Fachry Dzaky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 07:04:52