如何在SQL查询中将timestamp字段置为空值?场景化需求实现
SQL条件控制字段值解决方案
要实现仅当ACTION_TAKEN字段值为CANCELLED时返回时间戳,否则返回空值,直接用SQL的CASE语句就能搞定,几乎所有主流数据库都支持这个语法。
修改后的完整查询代码
DROP TABLE IF EXISTS INVESTIGATIVE_ACTION_TABLE; CREATE TEMPORARY TABLE INVESTIGATIVE_ACTION_TABLE AS( SELECT DISTINCT t1.POLICY_NBR AS POLICY_ID, TRANS_TYP_DESC AS ACTION_TAKEN, -- 仅当ACTION_TAKEN是CANCELLED时返回时间戳,否则为空 CASE WHEN TRANS_TYP_DESC = 'CANCELLED' THEN CNCL_EFCTV_DT ELSE NULL END AS DATE, CNCL_EFCTV_DT AS CANCEL_EFECT_DATE FROM POLICY_DETAILS AS t1 INNER JOIN CANC_EFCTV AS t2 ON t1.POLICY_NBR = t2.POLICY_NBR QUALIFY ROW_NUMBER() OVER (PARTITION BY POLICY_ID, ACTION_TAKEN, CANCEL_EFECT_DATE ORDER BY POLICY_ID DESC) = 1 ORDER BY POLICY_ID DESC );
关键说明
- 新增的
CASE语句是核心逻辑:判断TRANS_TYP_DESC(即别名ACTION_TAKEN的字段)是否等于'CANCELLED',满足条件就返回CNCL_EFCTV_DT的时间戳,不满足则返回NULL。 - 已修复原查询中
SELECT语句末尾多余的逗号问题,避免语法报错。 - 如果不需要保留原
CANCEL_EFECT_DATE字段,可直接删除对应行,只保留条件生成的DATE字段即可。
内容的提问来源于stack exchange,提问作者Anuar Vargas
相关产品推荐
相关产品推荐

