MySQL如何将int类型的last_reviews列转换为date类型或创建对应date列
MySQL下Airbnb数据int类型时间列转date及date列创建方案
现有int类型last_reviews列转date类型
首先确认你的int列存储的内容格式,按对应方式处理:
- 存储内容为10位秒级Unix时间戳
- 先校验转换结果是否符合预期:
SELECT last_reviews, FROM_UNIXTIME(last_reviews, '%Y-%m-%d') AS converted_date FROM 你的表名 LIMIT 10; - 校验无误后新增临时date列存储转换后数据:
ALTER TABLE 你的表名 ADD COLUMN tmp_last_reviews DATE; - 写入转换后的数据:
UPDATE 你的表名 SET tmp_last_reviews = FROM_UNIXTIME(last_reviews, '%Y-%m-%d'); - 确认数据全部正确后,替换原有列:
ALTER TABLE 你的表名 DROP COLUMN last_reviews; ALTER TABLE 你的表名 CHANGE COLUMN tmp_last_reviews last_reviews DATE; - 先校验转换结果是否符合预期:
- 存储内容为13位毫秒级Unix时间戳
转换时先将数值除以1000转成秒级再处理,其余步骤同上:FROM_UNIXTIME(last_reviews / 1000, '%Y-%m-%d') - 存储内容为YYYYMMDD格式的数字(比如20240520代表2024年5月20日)
用STR_TO_DATE函数转换即可,其余步骤同上:STR_TO_DATE(last_reviews, '%Y%m%d')
注意:转换前务必先备份全表数据,避免转换逻辑错误导致数据丢失,备份命令参考:
CREATE TABLE 你的表名_bak AS SELECT * FROM 你的表名;
直接创建date类型的last_reviews列
- 建表时直接指定字段类型:
CREATE TABLE airbnb_listings ( id INT PRIMARY KEY AUTO_INCREMENT, listing_name VARCHAR(255) NOT NULL, -- 其他业务字段 last_reviews DATE COMMENT '最新评论日期' );
- 已存在的表新增date类型的last_reviews列:
ALTER TABLE 你的表名 ADD COLUMN last_reviews DATE COMMENT '最新评论日期';
内容的提问来源于stack exchange,提问作者Jenny
相关产品推荐
相关产品推荐

