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

如何为DimTime表添加节假日标识并更新HolidayInd字段?

更新DimTime表的HolidayInd字段解决方案

需求说明

  • 已在DimTime表新增HolidayInd字段,需根据Holidays表的节假日信息更新该字段:节假日标记为1,非节假日标记为0
  • DimTime表包含1900至2050年的全量日期数据
  • Holidays表存储2000至2050年所有节假日的idDimTime标识

表结构示例

当前DimTime表状态

idDimTime FullTime      HolidayInd
20000101  2000-01-01    NULL
20000102  2000-01-02    NULL
20000103  2000-01-03    NULL
20000104  2000-01-04    NULL
20000105  2000-01-05    NULL
20000106  2000-01-06    NULL
20000107  2000-01-07    NULL
20000108  2000-01-08    NULL
20000109  2000-01-09    NULL
200001010 2000-01-10    NULL

Holidays表数据

id idDimTime
1  20000101
2  20000110
3  20000320
4  20000420
5  20000421

期望更新后的DimTime表结果

idDimTime FullTime    HolidayInd
20000101  2000-01-01    1
20000102  2000-01-02    0
20000103  2000-01-03    0
20000104  2000-01-04    0
20000105  2000-01-05    0
20000106  2000-01-06    0
20000107  2000-01-07    0
20000108  2000-01-08    0
20000109  2000-01-09    0
200001010 2000-01-10    1

更新SQL语句

你已经写出了关联查询的逻辑,在此基础上可以直接改成更新语句,以下提供两种常用写法:

写法1:JOIN式更新(适配MySQL、SQL Server等主流数据库)

直接利用左关联的结果更新字段:

UPDATE DimTime DT
LEFT JOIN Holidays H ON H.IdDimTime = DT.IdDimTime
SET DT.HolidayInd = CASE 
    WHEN H.IdDimTime IS NULL THEN 0
    ELSE 1
END
WHERE DT.IdDimTime BETWEEN 20000101 AND 20501231;

写法2:子查询更新(通用语法,适配更多数据库类型)

如果你的数据库不支持JOIN更新,可以用存在性判断的子查询实现:

UPDATE DimTime
SET HolidayInd = (
    SELECT CASE 
        WHEN EXISTS (SELECT 1 FROM Holidays H WHERE H.IdDimTime = DimTime.IdDimTime)
        THEN 1
        ELSE 0
    END
)
WHERE IdDimTime BETWEEN 20000101 AND 20501231;

验证更新结果

执行更新后,可使用你原有的查询语句验证结果是否符合预期:

SELECT  
DT.IdDimTime
,CASE WHEN H.IdDimTime IS NULL THEN 0
        ELSE 1
        END AS HolidayInd
FROM DimTime DT
LEFT JOIN Holidays H ON H.IdDimTime = DT.IdDimTime
WHERE DT.IdDimTime BETWEEN 20000101 AND 20501231
ORDER BY DT.IdDimTime;

内容的提问来源于Stack Exchange,提问作者Andres Mora

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 06:30:51