You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将nvarchar(max)类型日期转换为DateTime类型用于数据库迁移?

日期格式转换方法(nvarchar(max) → DateTime)

针对你遇到的dd/mm/yyyy格式字符串转DateTime类型的迁移需求,以下是主流数据库的具体转换方案:

SQL Server 方案

使用CONVERT或TRY_CONVERT函数,指定格式代码103(对应dd/mm/yyyy):

  • 确认数据无格式异常时用CONVERT:
SELECT CONVERT(DATETIME, 旧列名, 103) AS 转换后日期
FROM 旧表名;
  • 兼容脏数据(如格式错误的字符串)用TRY_CONVERT,转换失败会返回NULL:
SELECT TRY_CONVERT(DATETIME, 旧列名, 103) AS 转换后日期
FROM 旧表名;

迁移插入完整语句示例:

INSERT INTO 新表名(DateTime列名)
SELECT TRY_CONVERT(DATETIME, 旧列名, 103)
FROM 旧表名;

MySQL 方案

用STR_TO_DATE函数,指定匹配格式'%d/%m/%Y':

SELECT STR_TO_DATE(旧列名, '%d/%m/%Y') AS 转换后日期
FROM 旧表名;

迁移插入语句:

INSERT INTO 新表名(DateTime列名)
SELECT STR_TO_DATE(旧列名, '%d/%m/%Y')
FROM 旧表名;

若存在无效日期,可搭配IFNULL处理默认值:

SELECT IFNULL(STR_TO_DATE(旧列名, '%d/%m/%Y'), '1900-01-01') AS 转换后日期
FROM 旧表名;

PostgreSQL 方案

使用TO_DATE函数,格式模板为'DD/MM/YYYY':

SELECT TO_DATE(旧列名, 'DD/MM/YYYY') AS 转换后日期
FROM 旧表名;

迁移插入语句:

INSERT INTO 新表名(DateTime列名)
SELECT TO_DATE(旧列名, 'DD/MM/YYYY')
FROM 旧表名;

处理无效日期可使用CASE语句:

SELECT CASE WHEN TO_DATE(旧列名, 'DD/MM/YYYY') IS NOT NULL THEN TO_DATE(旧列名, 'DD/MM/YYYY') ELSE '1900-01-01' END AS 转换后日期
FROM 旧表名;

注意事项

  • 提前校验旧数据:先排查是否存在不符合dd/mm/yyyy格式的字符串,避免迁移中断
  • 验证转换结果:对比原字符串与转换后的DateTime值,确保日期逻辑正确(如26/03/2022需对应2022-03-26)

内容的提问来源于stack exchange,提问作者Dev Beginner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 03:10:29