MSSQL中如何将VARCHAR类型hiredate列转换为指定日期时间格式
解决VARCHAR日期格式转换问题(yyyy-mm-dd hh:mm:ss → DD-Mon-YYYY HR:MM)
嘿,这个需求挺常见的,我针对几种主流数据库给你整理了直接能用的实现方案~
1. MySQL 实现
因为你的hiredate是VARCHAR类型,得先把它转成数据库能识别的日期时间类型,再按目标格式输出:
SELECT DATE_FORMAT(STR_TO_DATE(hiredate, '%Y-%m-%d %H:%i:%s'), '%d-%b-%Y %H:%i') AS formatted_hiredate FROM your_table;
STR_TO_DATE(hiredate, '%Y-%m-%d %H:%i:%s'):把字符串格式的日期转成MySQL可识别的日期时间类型DATE_FORMAT(..., '%d-%b-%Y %H:%i'):将日期时间按DD-Mon-YYYY HR:MM格式输出(%b会自动生成英文月份缩写,比如Apr)
如果需要永久修改表中数据,可以先新增列再更新:
-- 新增存储格式化后日期的列 ALTER TABLE your_table ADD COLUMN formatted_hiredate VARCHAR(20); -- 更新数据 UPDATE your_table SET formatted_hiredate = DATE_FORMAT(STR_TO_DATE(hiredate, '%Y-%m-%d %H:%i:%s'), '%d-%b-%Y %H:%i'); -- 可选:删除旧列或重命名列 ALTER TABLE your_table DROP COLUMN hiredate; ALTER TABLE your_table CHANGE COLUMN formatted_hiredate hiredate VARCHAR(20);
2. Oracle 实现
Oracle的日期处理函数更直接,用TO_DATE解析字符串为日期类型,再用TO_CHAR格式化:
SELECT TO_CHAR(TO_DATE(hiredate, 'YYYY-MM-DD HH24:MI:SS'), 'DD-Mon-YYYY HH24:MI') AS formatted_hiredate FROM your_table;
TO_DATE(hiredate, 'YYYY-MM-DD HH24:MI:SS'):把字符串转成Oracle日期类型TO_CHAR(..., 'DD-Mon-YYYY HH24:MI'):按目标格式输出,Mon会生成英文月份缩写(默认首字母大写,取决于数据库的NLS设置)
3. SQL Server 实现
用TRY_CONVERT先转成DATETIME类型,再用FORMAT函数生成目标格式:
SELECT FORMAT(TRY_CONVERT(DATETIME, hiredate, 120), 'dd-MMM-yyyy HH:mm') AS formatted_hiredate FROM your_table;
TRY_CONVERT(DATETIME, hiredate, 120):120是SQL Server对应yyyy-mm-dd hh:mm:ss的格式代码,TRY_CONVERT会自动跳过格式错误的记录(返回NULL)FORMAT(..., 'dd-MMM-yyyy HH:mm'):MMM生成英文月份缩写,HH是24小时制,mm是分钟
小提醒
- 如果原数据存在格式不规范的记录(比如不符合
yyyy-mm-dd hh:mm:ss格式),建议用带容错的函数(比如MySQL的TRY_STR_TO_DATE、SQL Server的TRY_CONVERT)避免查询报错 - 如果只是临时查询转换,用SELECT语句即可;如果需要长期存储,建议先把列类型改成DATE/DATETIME,再存储格式化后的值,这样更利于后续的日期计算
内容的提问来源于stack exchange,提问作者badri




