navicat 15 导出 excel 时无法保留数据库显示格式,导出的是原始值,需在 sql 层用 date_format、to_char 或 format 显式转换;导出时优先选 csv,或对 .xlsx 启用带引号的文本导出并手动设列为文本。
navicat 15 导出 excel 时无法直接保留数据库中的“显示格式”,它导出的是字段原始值(如 2024-06-15 14:23:08),后续如何显示完全由 excel 自行解析——所以你看到的“1900/1/1”或“45123”之类,不是 navicat 改的,是 excel 把时间戳当数值处理了。
导出前必须在 SQL 层做类型兜底
Navicat 不会主动把 DATETIME 字段转成你想要的字符串格式再写入 Excel;它只按数据库返回的原始类型写。如果你希望导出后 Excel 显示为 2024-06-15 或 2024年6月15日,就得在查询里显式转换:
- MySQL:用
DATE_FORMAT(created_at, '%Y-%m-%d')或CONCAT(YEAR(created_at),'年',MONTH(created_at),'月',DAY(created_at),'日') - PostgreSQL:用
TO_CHAR(created_at, 'YYYY-MM-DD') - SQL Server:用
FORMAT(created_at, 'yyyy-MM-dd')(2012+)或CONVERT(VARCHAR, created_at, 23) - 如果字段本身是
TIMESTAMP但只想导出日期部分,不加转换的话,Excel 很可能显示为带时间的长数字(如45123.6),且双击打开时自动变成“1900/1/1”风格
导出设置中避开 Excel 的自动识别陷阱
即使 SQL 已转成字符串,Excel 双击打开仍可能把它当日期类型重解析(尤其形如 2024-06-15 的字符串)。要稳住格式:
- 导出格式优先选
.csv而非.xlsx:CSV 是纯文本,不会触发 Excel 的启发式类型判断 - 若必须导出
.xlsx,在导出向导第 2 步点击「高级」→ 勾选Export data with quotes→Text qualifier设为"→ 勾选Quote all text fields:这会让日期字符串变成"2024-06-15",Excel 导入时更倾向识别为文本 - 绝对不要双击打开导出的 Excel 文件;应启动 Excel 后,走「数据 → 从工作簿导入」→ 在列类型中手动设为「文本」
$date 宏和导出日期无关,别混淆
有人误以为 $date 宏能控制导出内容里的日期格式,其实它只影响**文件名**(如 report_$date.xlsx → report_2026-06-09.xlsx),对单元格里的时间显示毫无作用。这个宏:
- 仅在「导出向导」的「文件路径」输入框中生效
- 不支持自定义格式(不能写成
$date_YYYYMMDD) - 在「批量任务」或「快速导出」里完全无效
- 和字段值的格式化是两回事,混用只会让你调试更久
真正卡住人的点,往往不是 Navicat 导不出格式,而是你默认 Excel 会“记住”你写的字符串样子——它不会。只要没走「从文本导入」或没加引号包裹,Excel 就随时可能把 "2024-06-15" 当成日期再格式化一遍。防住这一步,比调一百次 Navicat 设置都管用。











