MySQL Workbench 8.0中如何将date列格式化为dd-mm-yyyy格式
问题根因
你所用的CONVERT(VARCHAR(255), date, 103)是SQL Server的专属语法,MySQL的CONVERT函数不支持第三个格式编码参数,因此无法返回预期结果;而CAST(date as DATE)仅能做类型转换,无法指定日期的显示格式,转换后默认输出yyyy-mm-dd格式,也不符合你的需求。
可行操作方案
根据你的需求分两种场景处理:
仅查询时临时返回dd-mm-yyyy格式
不需要修改原表结构,直接用MySQL原生的DATE_FORMAT函数做格式化即可:
SELECT date, -- 如果导入后date列已经是DATE类型,删掉外层STR_TO_DATE即可 DATE_FORMAT(STR_TO_DATE(date, '%Y-%m-%d'), '%d-%m-%Y') AS new_date FROM production_sales_forecast;
常用日期格式符说明:
%d:两位数字的日期(01-31)%m:两位数字的月份(01-12)%Y:四位数字的年份%y:两位数字的年份
如果你的原始date字符串是d/m/yyyy这类斜杠分隔的格式,把STR_TO_DATE的第二个参数改成'%d/%m/%Y'即可匹配解析。
永久统一整表date列的格式
注意:MySQL原生DATE/DATETIME类型的存储层不绑定显示格式,所有格式化操作都是查询时输出的,不建议把日期存为字符串类型,否则后续排序、日期计算都会出现异常。
- 先把导入时默认存为文本的date列转为标准DATE类型:
-- 先执行查询校验解析结果,确认所有值都能正确转换 SELECT date, STR_TO_DATE(date, '%Y-%m-%d') AS parsed_date FROM production_sales_forecast; -- 校验无误后修改列类型 ALTER TABLE production_sales_forecast MODIFY COLUMN date DATE NOT NULL;
- 后续所有需要输出dd-mm-yyyy格式的查询,统一用
DATE_FORMAT(date, '%d-%m-%Y')做格式化即可。
如果确实需要在表中持久化存储dd-mm-yyyy格式的字符串值(不推荐),可以新增一列存储格式化结果:
ALTER TABLE production_sales_forecast ADD COLUMN formatted_date VARCHAR(10); UPDATE production_sales_forecast SET formatted_date = DATE_FORMAT(date, '%d-%m-%Y');
内容的提问来源于stack exchange,提问作者Vikram Aiyer
相关产品推荐
相关产品推荐

