MySQL:基于date_activated列生成当年第一天的Datetime列
生成日期列对应年度第一天的Datetime数据
现有数据表包含date_activated日期列,需要新增一列,将该列日期转换为对应年份第一天的Datetime格式数据,示例如下:
| id | date_activated | datetime |
|---|---|---|
| 1 | 2016-05-12 | 2016-01-01 00:00:00 |
| 2 | 2019-05-16 | 2019-01-01 00:00:00 |
用Pandas实现
- 先确保
date_activated列是datetime类型(如果原本不是的话):
import pandas as pd df['date_activated'] = pd.to_datetime(df['date_activated'])
- 新增目标列,生成年度第一天的Datetime数据:
# 方法1:利用周期转换 df['datetime'] = df['date_activated'].dt.to_period('Y').dt.start_time # 方法2:直接构造日期 from datetime import datetime df['datetime'] = df['date_activated'].apply(lambda x: datetime(x.year, 1, 1))
用SQL实现(不同数据库写法)
MySQL
先新增列,再更新数据:
ALTER TABLE your_table ADD COLUMN datetime DATETIME; UPDATE your_table SET datetime = DATE_FORMAT(date_activated, '%Y-01-01 00:00:00');
PostgreSQL
ALTER TABLE your_table ADD COLUMN datetime TIMESTAMP; UPDATE your_table SET datetime = DATE_TRUNC('year', date_activated);
SQL Server
ALTER TABLE your_table ADD datetime DATETIME; UPDATE your_table SET datetime = DATEFROMPARTS(YEAR(date_activated), 1, 1);
内容的提问来源于stack exchange,提问作者jason lee
相关产品推荐
相关产品推荐

