如何将提取的年、月拼接为yyyy-mm-01格式的datetime类型
解决方案
你之前的语句问题出在两个核心点:
- 拼接顺序完全错误,日期格式要求
年-月-日,你把日、月、年的顺序搞反了 01未加引号,会被当作数字1处理,拼接后格式完全不符合日期规范
方法一:直接利用原字段拼接(最简便)
既然原字段已经是yyyy-mm格式的char(8),无需单独提取年和月,直接拼接'-01'再转换为日期类型即可:
CAST(CONCAT(cc.your_original_date_col, '-01') AS DATE) AS ref_date
将your_original_date_col替换为你实际使用的字段名即可。
方法二:用已提取的year和month拼接
如果必须使用已提取好的year和month字段,需严格按照年-月-01的顺序拼接,且确保各部分为字符串格式:
CAST(CONCAT(cc.year, '-', cc.month, '-01') AS DATE) AS ref_date
若year或month是数字类型,需先转换为字符串:
CAST(CONCAT(CAST(cc.year AS CHAR(4)), '-', CAST(cc.month AS CHAR(2)), '-01') AS DATE) AS ref_date
关键逻辑
无论哪种方式,最终拼接出的字符串必须是yyyy-mm-dd格式(如2024-05-01),才能被CAST正确转换为日期类型。
内容的提问来源于stack exchange,提问作者Roberto92
相关产品推荐
相关产品推荐

